Python ValueError:chr()arg不在范围内(256)

1 python dictionary translate

所以我正在学习python并重做一些旧项目.该项目涉及从命令行获取要翻译的字典和消息,以及翻译消息.(例如:"顺便说一下,你好,你怎么样"将被翻译成"顺便说一句,你好,你好吗".

我们使用教授提供的扫描仪来读取令牌和字符串.如有必要,我也可以在这里发布.继承人我的错误:

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)
Run Code Online (Sandbox Code Playgroud)

继承人我的主要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()
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的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
Run Code Online (Sandbox Code Playgroud)

有谁知道这里发生了什么?我已经看过好几次了,我不知道为什么readString会抛出这个错误...它可能是我错过了一些愚蠢的东西

ris*_*sto 5

问题是您正在转换的角色chr不在接受的范围内(range(256)).该值0x2018在小数为8216.

看看unichr,还看到chr.


Mat*_*ias 5

chr(0x2018) 如果您使用Python 3,将可以正常工作。

您已经为Python 3编写了代码,但是可以使用Python 2运行它。在Python 2中,chr您将得到一个ASCII范围内的字符串。这是一个8位的串,所以对于最大参数值chr是255。在Python 3中,您将获得一个unicode字符,并且unicode代码点可以达到更高的值。