小编典典

将代码从Python 2.x转换为3.x

python

这是我先前问题的跟进,我正在使用Senthil Kumaran建议的2to3工具

似乎工作正常,但没有涉及到这一部分:

raise LexError,("%s:%d: Rule '%s' returned an unknown token type '%s'" % (
    func.func_code.co_filename, func.func_code.co_firstlineno,
    func.__name__, newtok.type),lexdata[lexpos:])

3.2中应该是什么样子?

编辑:
从下面的答案的变化是好的,2to3现在似乎工作正常。。


阅读 214

收藏
2021-01-20

共1个答案

小编典典

LexError后删除逗号。可以在Python 2和Python 3中使用。

在Python 2中,很少使用语法来引发如下异常:

raise ExceptionClass, "The message string"

这是在这里使用的,但是由于某种原因,也许由于消息字符串周围有一个括号(根据Senthils测试,是括号中的换行符),2to3错过了更好的更改:

raise ExceptionClass("The message string")

因此它应该看起来像这样(在Python 2中)

message = "%s:%d: Rule '%s' returned an unknown token type '%s'" % (
           func.func_code.co_filename, func.func_code.co_firstlineno,
           func.__name__, newtok.type),lexdata[lexpos:])
raise LexError(message)

因为在与加薪相同的行上格式化该消息很困难。:-)然后,func_code被重命名,因此在Python
3中有更多更改。但是通过上述更改,2to3应该可以正常工作。

2021-01-20