我有一个名为SSFbasis.py的模块,其中包含一个名为SSFBasisFunc的函数,如下所示:
if __name__ == '__main__':
def SSFBasisFunc():
import os
import re
from pandas import ExcelWriter
......... etc.
然后我有一个MainScript.py,我在那里
import SSFBasis
a = SSFBasis.SSFBasisFunc()
我收到错误AttributeError:模块'SSFBasis'没有属性'SSFBasisFunc'。
现在,据我了解,函数中的name = main部分应防止代码在初始import语句上执行-确实这是我想要发生的事情。
但是鉴于我随后明确地调用了该函数,识别该函数是否应该很好,否则我会误解 名称 =='主要':?
**我正在使用Spyder和Python 3.7 **
答案 0 :(得分:1)
TL; DR:在if __name__=='main
之外定义导出的值和函数。
您当前在脚本中在导入时不会运行的部分中定义SSFBasisFunc()
,因此您无法在以import SSFBasis
开头的另一个脚本中访问它。
正确的用法是:
在SSFBasis.py中:
def SSFBasisFunc():
# define your function.
# this part is not computationally intensive, because the function is only defined, not ran!
# optional, but usually a Python pattern
if __name__=="main":
# define tests using SSFBasisFunc
# might be computationally intensive
在另一个脚本中:
import SSFBasis
# SSFBasis.SSFBasisFunc() is defined
答案 1 :(得分:0)
现在,据我所知,名称=函数的主要部分
它不是“在您的功能中”,而是在您的功能之前。
应防止代码在初始导入语句上执行
更确切地说,tt禁止在导入模块时执行这部分代码(相对于作为脚本执行)。
现在您真的不明白这意味着什么。此“阻止”执行的代码是def
语句,它是创建函数的代码-而不是函数的代码本身(仅在调用该函数时执行)。
IOW,在这种情况下,仅当文件作为脚本执行时才定义SSFBasis
函数。
-确实这就是我想要发生的事情。
显然不是xD
但是鉴于我随后明确地调用了该函数, 识别功能应该不是很好,