我在同一目录中有两个文件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__
范围后运行?答案 0 :(得分:2)
我能理解的是如下。也许更专家的人可以详细说明!
if __name__ == '__main__':
此条件用于检查python模块是直接运行还是正在导入。__name__
是模块的名称而不是main。因此,在这种情况下,最好拨打if __name__ == '__main__':
答案 1 :(得分:1)
曼!!你正在创造一个循环的时刻。我告诉你怎么做。
import database # from app.py
但是从database.py
你从app导入数据库。那就是创造一个循环的时刻。
另一方面,
if __name__ == '__main__':
这会让您database.py
作为模块的名称,而不是__main__
,这就是它工作的原因。没有什么神奇的:)
更新:在from app import db
函数中放置show_database_information()
这一行
这是你的HOTFIX。