2013-06-22 66 views
1

我读了源代码,请参见:<py3fix>是什么意思?

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

我阅读文档,约compile,它只是告诉我,<string>常用。我也用google搜索了一下,但是找不到相关的信息。

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

在此先感谢。

回答

3

它完全不影响它。这只是一个名称,它用于标识编译代码的来源,所以你可以使用你想要的字符串。

像文档说:

编译(源,文件名,模式[,标志[,dont_inherit]])

filename参数应该给从该代码是 读取文件;如果未从文件中读取 ('< string>'通常使用),则传递一些可识别的值。

的情况下

其中source不是从一个文件(如这里)阅读他们建议您使用<string>,让你知道这个代码是从一个字符串写入编译。


编写代码的人,在修复一些Bottle Python 2/3 bugs时做了它。所以我猜测,他用<py3fix>,以此来识别断言从当用户运行2.x的他编译def _raise有人提出:

>>> 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 
+0

谢谢,很好的答案。它只是像评论一样,对吧? – zhangyangyu

+0

类别。这是关于*来自哪里的评论,所以它不应该太冗长。 –