Python ValueError: chr() arg вне диапазона (256)

Поэтому я изучаю Python и переделываю некоторые старые проекты. Этот проект включает в себя получение словаря и сообщения для перевода из командной строки, а также перевод сообщения. (Например: "кстати, привет, как ru" будет переводиться как "кстати, привет, как дела".

Мы используем сканер, предоставленный профессором, для считывания токенов и строк. При необходимости я также могу опубликовать это здесь. Вот моя ошибка:

Nathans-Air-4:py1 Nathan$ python translate.py test.xlt test.msg
Traceback (most recent call last):
  File "translate.py", line 26, in <module>
    main()
  File "translate.py", line 13, in main
    dictionary,count = makeDictionary(commandDict)
  File "/Users/Nathan/cs150/extra/py1/support.py", line 12, in makeDictionary
    string = s.readstring()
  File "/Users/Nathan/cs150/extra/py1/scanner.py", line 105, in readstring
    return self._getString()
  File "/Users/Nathan/cs150/extra/py1/scanner.py", line 251, in _getString
    if (delimiter == chr(0x2018)):
ValueError: chr() arg not in range(256)

Вот мой основной файл translate.py:

from support import *
from scanner import *
import sys

def main():
    arguments = len(sys.argv)
    if arguments != 3:
        print'Need two arguments!\n'
        exit(1)
    commandDict = sys.argv[1]
    commandMessage = sys.argv[2]

    dictionary,count = makeDictionary(commandDict)

    message,messageCount = makeMessage(commandMessage)

    print(dictionary)
    print(message)

    i = 0
    while count < messageCount:
        translation = translate(message[i],dictionary,messageCount)
        print(translation)
        count = count + 1
        i = i +1
    main()

И вот мой файл support.py, который я использую...

from scanner import *

def makeDictionary(filename):
    fp = open(filename,"r")

    s = Scanner(filename)
    lyst = []
    token = s.readtoken()
    count = 0
    while (token != ""):
        lyst.append(token)
        string = s.readstring()
        count = count+1
        lyst.append(string)
        token = s.readtoken()
    return lyst,count

def translate(word,dictionary,count):
    i = 0
    while i != count:
        if word == dictionary[i]:
            return dictionary[i+1]
            i = i+1
        else:
            return word
            i = i+1
    return 0

def makeMessage(filename):
    fp = open(filename,"r")

    s = Scanner(filename)
    lyst2 = []
    string = s.readtoken()
    count = 0
    while (string != ""):
        lyst2.append(string)
        string = s.readtoken()
        count = count +  1
    return lyst2,count

Кто-нибудь знает, что здесь происходит? Я просмотрел несколько раз, и я не знаю, почему readString выдает эту ошибку... Это, вероятно, что-то глупое, я пропустил

2 ответа

Решение

chr(0x2018) будет работать, если вы используете Python 3.

У вас есть код, написанный для Python 3, но вы запускаете его с Python 2. В Python 2 chr даст вам одну символьную строку в диапазоне ASCII. Это 8-битная строка, поэтому максимальное значение параметра для chrявляется 255, В Python 3 вы получите символ Unicode, а кодовые точки Unicode могут достигать гораздо более высоких значений.

Проблема в том, что персонаж, который вы конвертируете, использует chr не в пределах допустимого диапазона (range(256)). Значение 0x2018 в десятичном виде - 8216

Проверьте unichr, а также увидеть Chr.

Другие вопросы по тегам