![](/img/trans.png)
[英]Cannot import local module in Python despite trying multiple suggestions
[英]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.