这是我先前问题的跟进,我正在使用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现在似乎工作正常。。
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应该可以正常工作。