Python 2具有內置函數execfile
,它已在Python 3.0中刪除。 This question討論了Python 3.0的替代方法,但有些considerable changes已被製作since Python 3.0。替代Python 3中的execfile嗎?
對於Python 3.2和future Python 3.x versions,execfile
的最佳替代方案是什麼?
Python 2具有內置函數execfile
,它已在Python 3.0中刪除。 This question討論了Python 3.0的替代方法,但有些considerable changes已被製作since Python 3.0。替代Python 3中的execfile嗎?
對於Python 3.2和future Python 3.x versions,execfile
的最佳替代方案是什麼?
的2to3
腳本(還有一個在Python 3.2)由
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
這似乎是官方推薦替代
execfile(filename, globals, locals)
。
execfile(filename)
可以
exec(open(filename).read())
這在Python
的所有版本爲什麼這比Sven的版本更好? – 2011-06-15 23:07:58
@Matt:這很簡單嗎? – 2011-06-16 03:07:10
必須是由於我的代碼,但是當我使用這個,而不是execfile,我得到:「SyntaxError:不合格的exec不允許在函數'test_file'它包含嵌套函數與自由變量」(在Python 2.7中) – VPeric 2011-11-03 11:22:10
在Python3.x被替換,這是最近的事情,我可以拿出來直接執行文件時,匹配運行python /path/to/somefile.py
。
注:
__main__
,一些腳本依賴於該檢查如果他們正在加載作爲一個模塊或不爲例如。 if __name__ == "__main__"
__file__
對於異常消息更好,某些腳本使用__file__
來獲取其他文件相對於它們的路徑。def exec_full(filepath):
import os
global_namespace = {
"__file__": filepath,
"__name__": "__main__",
}
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), global_namespace)
# execute the file
exec_full("/path/to/somefile.py")
標準runpy.run_path是另一種選擇。
爲什麼這比Lennart的版本更好? – 2011-06-15 23:07:50
@Matt:優點是(一)錯誤信息將包括正確的文件名和(二)它似乎是官方的建議,所以也許有我們不知道的優勢。如果你省略'globals'和'locals'參數,它也可以在所有版本的Python中工作。 – 2011-06-16 00:21:11
我知道這是官方的建議,但與此我得到這些:「ResourceWarning:未關閉的文件<_io.TextIOWrapper名稱='...」錯誤。它只是測試運行器,所以它並不重要,但仍然.. – VPeric 2011-11-03 11:20:37