我有兩個文件,app.py
和database.py
在同一目錄中。 主要是我有下面的代碼片段:導入有和沒有主要範圍
app.py
import database
db = "demo_database"
print(database.show_database_information())
database.py
from app import db
database_username = "root"
database_password = "password"
def show_database_information():
information = {}
information["filename"] = db
information["username"] = database_username
information["password"] = database_password
return information
當我嘗試運行app.py
我得到了以下錯誤:
Traceback (most recent call last):
File "K:\PyPrac\circular_call\app.py", line 1, in <module>
import database
File "K:\PyPrac\circular_call\database.py", line 1, in <module>
from app import db
File "K:\PyPrac\circular_call\app.py", line 3, in <module>
print(database.show_database_information())
AttributeError: module 'database' has no attribute 'show_database_information'
然後我更新app.py
並列入__main__
檢查象下面這樣:
app.py
import database
db = "demo_database"
if __name__ == '__main__':
print(database.show_database_information())
現在,運行流暢,沒有任何錯誤。
我有幾個問題,
- 是發生了什麼錯誤的名字在第一種情形?需要解釋。
- 爲什麼在包含
__main__
範圍後運行? - 做這種操作的更好方法是什麼?
我知道它正在創建循環導入,但是它如何使用主範圍來解決? – arsho
@arsho我已經更新了我的答案。我希望它能幫助你。 –
它是一個熱修復,但現在函數被調用兩次。 '''{'filename':'database.sqlite','username':'root','password':'password'} {'filename':'database.sqlite','username':'root', '密碼':'密碼'}'''感謝您的更新。 – arsho