<py3fix>是什么意思?</py3fix>

时间:2013-06-22 04:22:11

标签: python compilation bottle

我正在阅读 bottle 源代码并查看:

eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))

我阅读了有关compile的文档,但它只告诉我<string>是常用的。我也在stackoverflow上搜索和搜索,但无法找到相关信息。

那么有谁能告诉我<py3fix>如何影响编译?还有其他文件名,我在哪里可以找到相关文档?

提前致谢。

1 个答案:

答案 0 :(得分:3)

它根本不会影响它。它只是一个名称,用于标识编译代码的来源,因此您可以使用所需的字符串。

就像文档说的那样:

  

compile(source,filename,mode [,flags [,dont_inherit]])

     

filename参数应该给出代码所在的文件   读;如果没有从文件中读取,则传递一些可识别的值   ('&lt; string&gt;'常用)。

如果没有从文件中读取source(如此处),他们建议您使用<string>,以便您知道此代码是从写入的字符串编译的。


评论代码的人在修复某些Bottle Python 2/3 bugs时就这样做了。所以我猜他用<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