有和没有主要范围的导入
Import with and without main scope
我在同一目录中有两个文件,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__
范围后 运行s?
- 进行这样的操作的更好方法是什么?
我能理解的如下。也许更专业的人可以详细说明!
- 导入错误。
if __name__ == '__main__':
此条件用于检查 python 模块是直接 运行 还是导入。
- 如果导入了模块,那么
__name__
是模块的名称而不是 main。因此,在这种情况下,最好调用 if __name__ == '__main__':
伙计!!你正在创造一个循环时刻。让我告诉你如何。
import database # from app.py
但是从 database.py
开始,您从应用程序导入了数据库。那就是创造一个循环时刻。
另一方面,
if __name__ == '__main__':
这使您 database.py
作为模块的名称而不是 __main__
这就是它起作用的原因。没什么神奇的:)
更新:将from app import db
这一行放在函数show_database_information()
中
这是为您准备的热修复程序。
我在同一目录中有两个文件,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__
范围后 运行s? - 进行这样的操作的更好方法是什么?
我能理解的如下。也许更专业的人可以详细说明!
- 导入错误。
if __name__ == '__main__':
此条件用于检查 python 模块是直接 运行 还是导入。- 如果导入了模块,那么
__name__
是模块的名称而不是 main。因此,在这种情况下,最好调用if __name__ == '__main__':
伙计!!你正在创造一个循环时刻。让我告诉你如何。
import database # from app.py
但是从 database.py
开始,您从应用程序导入了数据库。那就是创造一个循环时刻。
另一方面,
if __name__ == '__main__':
这使您 database.py
作为模块的名称而不是 __main__
这就是它起作用的原因。没什么神奇的:)
更新:将from app import db
这一行放在函数show_database_information()
中
这是为您准备的热修复程序。