[英]How to send an argument to another file in python 3
因此,我一直在研究有關該主題的其他線程,但是如果沒有足夠清晰地解釋我無法理解,則它們不使用將參數傳遞給另一個文件的模塊版本。
我只是試圖表明我不只是在問:
#MoneyCounter.py
import Password
enter = False
Password.system(enter)
def start(check):
if check == True:
main()
elif check == False:
print("Critical Error occured")
exit()
還有我的其他檔案
#Password.py
import MoneyCounter
def system(check):
if check == False:
password() #This goes to password def not mentioned in this code
elif check == True:
MoneyCounter.start(check)
我收到的錯誤是模塊密碼沒有屬性系統
我收到的錯誤是模塊密碼沒有屬性系統
當然不是。 在執行代碼行時該定義不存在,因為第一個文件的執行被導入中斷。
可以對代碼進行重構或重新排序,以便在名稱存在之前不能訪問該名稱,或者刪除每個模塊對另一個模塊的要求。
您的問題是循環依賴/導入。
import
語句實際上執行導入文件中的代碼。 也就是說,所有的語句執行,即一切def
導入文件編被定義等imports
獲得進口了。
所以這是怎么回事:
$ python MoneyCounter.py
import Password
import MoneyCounter.py
import Password
,但是在已知名稱列表中已經有密碼; 所以它繼續 enter=False; Password.system(enter)
enter=False; Password.system(enter)
。
Password
:半導入的Password
。 在這種情況下, def system…
尚未發生,因此Password.system
仍然是未知的。 通常,您的體系結構是有問題的 。 為什么Password
“實用程序”模塊會調用您的“主”業務邏輯? 最好不要這樣做,而是編寫代碼來實際檢查Password.system
的返回值,並根據MoneyCounter.py
中的MoneyCounter.py
。
假設MoneyCounter.py
是入口點(您從命令行運行的名稱),那么我建議您替換為:
enter = False
Password.system(enter)
有了這個:
if __name__ == "__main__":
enter = False
Password.system(enter)
那只會從入口點(稱為__main__
)執行,而不是在導入時執行。 但是,您應該重新考慮您的設計。
編輯:
name
是對當前模塊的文本名稱的引用。 對於顯式導入的模塊,其名稱取自文件名,但是入口點(程序開始的地方)始終稱為__main__
。 因此,我們始終可以測試是作為導入模塊還是作為入口點運行。
該測試在python中極為常見。 通過這種方式,我們可以提供附加功能,具體取決於我們將模塊作為程序運行還是import
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.