Python _uuuname_uuu=='下导入的函数__主&';不承认
我有一个名为SSFbasis.py的模块,其中包含一个名为SSFBasisFunc的函数,如下所示:Python _uuuname_uuu=='下导入的函数__主&';不承认,python,python-import,Python,Python Import,我有一个名为SSFbasis.py的模块,其中包含一个名为SSFBasisFunc的函数,如下所示: if __name__ == '__main__': def SSFBasisFunc(): import os import re from pandas import ExcelWriter ......... etc. 然后我有一个MainScript.py import SSFBasis a = SSFBasis.SS
if __name__ == '__main__':
def SSFBasisFunc():
import os
import re
from pandas import ExcelWriter
......... etc.
然后我有一个MainScript.py
import SSFBasis
a = SSFBasis.SSFBasisFunc()
我得到了错误属性error:module'SSFBasis'没有属性'SSFBasisFunc'
现在,据我所知,函数中的name=main部分应该阻止在初始import语句上执行代码——事实上,这就是我想要实现的
但是考虑到我正在显式地调用这个函数,识别这个函数不是很好吗,还是我误解了
name=='main':
**我正在使用Spyder和Python3.7**TL;DR:在
之外定义导出的值和函数,前提是
您当前在导入时未运行的脚本部分中定义了SSFBasisFunc()
,因此无法在以import SSFBasis
开头的另一个脚本中访问它
正确的用法是:
在SSFBasis.py中:
在另一个脚本中:
你也可以检查一下
现在,据我所知,name=函数中的主要部分
它不是“在你的功能中”,而是在你的功能之前
应防止在初始导入语句上执行代码
更确切地说,tt防止在导入模块时执行这部分代码(而不是作为脚本执行)
现在你真的不明白这意味着什么。这“阻止”执行的代码是def
语句,它是创建函数的代码,而不是函数的代码本身(仅在调用函数时执行)
在这种情况下,SSFBasis
函数仅在文件作为脚本执行时定义
--事实上,这就是我希望发生的事情
显然不是xD
但考虑到我正在显式调用函数,
识别功能不是很好吗
此时,此函数根本不存在 您理解
\uuuu name\uuuuu=='\uuuuuu main\uuuuu'
对。您对SSFBasisFunc
的定义从未运行过,因此您可以在导入它时调用它,因为它不存在。若要解决此问题,请在之外定义SSFBasisFunc()
,前提是
。其背后的原因是if uuuu name uuu==“uuu main uuuu”
部分仅在运行脚本本身时执行,我所说的脚本是SSFbasis.py
因此,您只能在SSFbasis.py
文件中使用SSFBasisFunc()
。。。我希望这能回答您的问题,但您确实希望代码能够运行,否则函数没有定义……我认为name==main只是阻止代码在导入时运行,但是如果随后显式调用它,就可以了。显然情况并非如此。感谢您的帮助我的误解是“它阻止了在导入模块时执行这部分代码”。我认为它只是在import语句上,之后显式调用时很好,但正如您所说的,它并不存在。非常感谢
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