无法导入本地python模块

时间:2018-06-12 14:50:35

标签: python python-3.x

我有一个脚本,其中包含我想在另一个中使用的函数,即

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

if __name__ == "__main__":
    main()

每当我将此脚本导入另一个脚本时,我都会收到错误" module' script'没有属性' ex'" :

import script

script.ex(4,5)

3 个答案:

答案 0 :(得分:1)

是的,这是正确的,函数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()的原因,我们只能猜测哪种方式最适合您。

答案 1 :(得分:0)

您必须将代码转换为以下内容:

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函数的范围内定义的。您无法直接从外部访问它。

答案 2 :(得分:-1)

要在调用函数时调用函数ex(),必须将其封装在script.py中的类或任何文件script中。所以在您的情况下,脚本.py应如下所示:

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

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

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

希望这有帮助。