[英]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
获得进口了。
所以这是怎么回事:
$ python MoneyCounter.py
import Password
import MoneyCounter.py
import Password
,但是在已知名称列表中已经有密码; 所以它继续 enter=False; Password.system(enter)
enter=False; Password.system(enter)
。
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.