繁体   English   中英

无法导入本地python模块

[英]Cannot import local python module

我有一个脚本包含要在另一个脚本中使用的功能,即

def main():
    def ex(a,b):
        return a+b

if __name__ == "__main__":
    main()

每当我将此脚本导入另一个脚本时,都会出现错误“模块'script'没有属性'ex'”:

import script

script.ex(4,5)

是的,没错,函数ex()是局部函数,仅在函数main()的范围内才知道。 如果导入该模块,它将包含函数main()并且如果执行该函数的过程中调用该模块,则会存在函数ex() 一旦函数main()终止,函数ex()就将不复存在。

您可能会觉得函数具有(模块)全局范围,而Python则不是这种情况。

您可以通过多种方式更改代码,以避免错误。 最明显的是在模块级别定义ex() (即main()函数内部没有):

def main():
    # do whatever
    pass

def ex(a,b):
    return a+b

另一个选择是返回本地函数:

def main():
    def ex(a,b):
        return a+b
    return ex

然后导入程序可以执行以下操作:

import script

ex = script.main()
print(ex(4, 5))

还有许多其他方法可以实现您想要的。 因为您没有告诉我们为什么ex()main()等中,所以我们只能猜测哪种方法最适合您。

您必须将代码转换为如下形式:

def main(a,b):
    def ex(a,b):
        return a+b
    return ex(a,b)
if __name__ == "__main__":
    main()

详细说明这样的事情:

import script
script.main(1,2)

问题在于ex()是在main函数的范围内定义的。 您将无法直接从外部访问它。

要在尝试调用函数ex()调用它,必须将其封装在script.py或存在的任何文件script中的类中。因此,在您的情况下,script.py应该如下所示:

class Script: def ex(a,b): return a+b

并在您要使用脚本的文件中:

script = new Script() script.ex(4, 5)

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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