繁体   English   中英

如何在python 3中将参数发送到另一个文件

[英]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获得进口了。

所以这是怎么回事:

  1. 你跑

$ python MoneyCounter.py

  1. Python读取MoneyCounter.py,执行其第一条语句: import Password
  2. Python读取Password.py,并执行其第一条语句: import MoneyCounter.py
  3. Python读取MoneyCounter.py,这次它遇到import Password ,但是在已知名称列表中已经有密码; 所以它继续

enter=False; Password.system(enter) enter=False; Password.system(enter)

  1. 现在,Python的名称查找字典中已经有一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM