无法识别以__name __ =='__main__'导入的函数

时间:2019-01-22 08:23:03

标签: 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.SSFBasisFunc()

我收到错误AttributeError:模块'SSFBasis'没有属性'SSFBasisFunc'。

现在,据我了解,函数中的name = main部分应防止代码在初始import语句上执行-确实这是我想要发生的事情。

但是鉴于我随后明确地调用了该函数,识别该函数是否应该很好,否则我会误解    名称 =='主要':?

**我正在使用Spyder和Python 3.7 **

2 个答案:

答案 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

您还可以选中what does if __name__=="main" do?

答案 1 :(得分:0)

  

现在,据我所知,名称=函数的主要部分

它不是“在您的功能中”,而是在您的功能之前。

  

应防止代码在初始导入语句上执行

更确切地说,tt禁止在导入模块时执行这部分代码(相对于作为脚本执行)。

现在您真的不明白这意味着什么。此“阻止”执行的代码是def语句,它是创建函数的代码-而不是函数的代码本身(仅在调用该函数时执行)。

IOW,在这种情况下,仅当文件作为脚本执行时才定义SSFBasis函数。

  

-确实这就是我想要发生的事情。

显然不是xD

  

但是鉴于我随后明确地调用了该函数,   识别功能应该不是很好,

在这一点上,这个功能根本不存在。 It has not been defined. It's totally unknown. No one ever heard of it. It's missing. It's been lost in vacuum. It's been erased from the realms of reality. It's a non-function