簡體   English   中英

如何在python 3中將參數發送到另一個文件

[英]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獲得進口了。

所以這是怎么回事:

  1. 你跑

$ python MoneyCounter.py

  1. Python讀取MoneyCounter.py,執行其第一條語句: import Password
  2. Python讀取Password.py,並執行其第一條語句: import MoneyCounter.py
  3. Python讀取MoneyCounter.py,這次它遇到import Password ,但是在已知名稱列表中已經有密碼; 所以它繼續

enter=False; Password.system(enter) enter=False; Password.system(enter)

  1. 現在,Python的名稱查找字典中已經有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM