我正在阅读瓶子源代码并查看:
eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))
我阅读了有关的文档compile
,它只告诉我<string>
常用的。我也在 stackoverflow 上搜索和搜索,但找不到相关信息。
那么谁能告诉我如何<py3fix>
影响编译?还有其他文件名吗,我在哪里可以找到相关文档?
提前致谢。
我正在阅读瓶子源代码并查看:
eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))
我阅读了有关的文档compile
,它只告诉我<string>
常用的。我也在 stackoverflow 上搜索和搜索,但找不到相关信息。
那么谁能告诉我如何<py3fix>
影响编译?还有其他文件名吗,我在哪里可以找到相关文档?
提前致谢。
它根本不影响它。它只是一个名称,用于标识编译代码的来源,因此您可以使用所需的字符串。
就像文档说的:
编译(源,文件名,模式[,标志[,dont_inherit]])
文件名参数应该给出读取代码的文件;如果不是从文件中读取,则传递一些可识别的值(通常使用“<字符串>”)。
在没有从文件中读取的情况下source
(如这里),他们建议您使用<string>
,以便您知道此代码是从写入的字符串编译的。
编写代码的人是在修复一些Bottle Python 2/3 错误时完成的。所以我猜他用<py3fix>
一种方法来识别断言是def _raise
在用户运行 2.x 时从他编译的过程中引发的:
>>> eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))
>>> _raise(Exception, "error message", None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<py3fix>", line 1, in _raise
Exception: error message
>>> eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<my_source_file>', 'exec'))
>>> _raise(Exception, "error message", None)Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<my_source_file>", line 1, in _raise
Exception: error message