當我運行:Python的exec和__name__
exec "print __name__"
它打印__main__
。
但是當我運行:
exec "print __name__" in {}
它打印__builtin__
。
如何使第二個示例也打印__main__
?
我試圖實現的是使用exec
運行一段代碼,以便從它的角度來看,它看起來像是從命令行運行。
我想用乾淨的範圍來代碼,但第二個例子打破了依賴if __name__ == "__main__"
的代碼。如何解決這個問題?
我不能在磁盤上創建一個臨時文件。沒有辦法像執行命令行一樣執行純字符串嗎?還有一個關於你的回覆的問題:它看起來好像它正在導入(如在'import'中)該文件 - 導入還是執行該文件?有區別嗎? –
爲了導入模塊,它*具有*被執行。 –
請注意,'__name__ =='__main __''的作用意味着你正在執行模塊。 –