2013-06-22 93 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

類別。這是關於*來自哪裏的評論,所以它不應該太冗長。 –