我正在嘗試導入一個名為的函數,page1該函數內部包含庫文件中的其他函數,以便我可以在該文件中調用它。但是,這會產生以下錯誤:Traceback (most recent call last):? File "/Users/antonios/numworks-math-libs/numworksMath.py", line 1, in <module>? ? import numworksLibs? File "/Users/antonios/numworks-math-libs/numworksLibs.py", line 1, in <module>? ? from numworksMath import page1? File "/Users/antonios/numworks-math-libs/numworksMath.py", line 35, in <module>? ? page1()? File "/Users/antonios/numworks-math-libs/numworksMath.py", line 29, in page1? ? numworksLibs.get_ordered_pair(ordered_pair_num, xs, ys)AttributeError: partially initialized module 'numworksLibs' has no attribute 'get_ordered_pair' (most likely due to a circular import)我認為這是因為主腳本正在導入庫,而庫正在導入主腳本(循環導入)。有沒有辦法可以在 Python 中解決這個問題?我已經嘗試了該網站上的所有解決方案,并確保沒有任何名稱與任何 Python 內置庫沖突。get_ordered_pair也在庫文件中定義。庫文件導入:from numworksMath import page1主腳本的片段:import numworksLibsdef page1():page1包含在沒有輸入的情況下調用函數時將運行的代碼,并且從 Python CLI 導入文件時會發生這種情況。
2 回答

catspeake
TA貢獻1111條經驗 獲得超0個贊
您可以通過檢查文件是否作為腳本運行或者是否作為模塊導入來保護代碼。為此,您需要檢查電流是否__name__
設置為'__main__'
。
如果您的文件如下所示:
def foo(): ... foo()
只需將其更改為僅在運行foo
時運行__name__
'__main__'
def foo(): ... if __name__ == '__main__': foo()
現在foo
只有當你直接在文件上調用 python 時才會自動運行,而不是簡單地導入它。

瀟湘沐
TA貢獻1816條經驗 獲得超6個贊
在這種情況下,您真正想做的是創建一個單獨的文件,包含您多次導入的所有代碼,并讓每個腳本導入它。對我來說,我創建了一個名為 的文件,main.py
其中包含需要多次導入的所有代碼,然后庫文件和主腳本都導入該文件。
添加回答
舉報
0/150
提交
取消