Импортированная функция под именем __name __ == '__main__' не распознана - PullRequest
0 голосов
/ 22 января 2019

У меня есть модуль с именем 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 ':?

** Я делаю это, используя Spyder и Python 3.7 **

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Теперь, насколько я понимаю, имя = основная часть в моей функции

Это не "в вашей функции", это до вашей функции.

должно препятствовать выполнению кода в начальном операторе импорта

Точнее говоря, tt препятствует выполнению этой части кода при импорте вашего модуля (противвыполняется как сценарий).

Теперь вы не совсем понимаете, что это значит.Код, который это «предотвращает» от исполнения, - это оператор def, который является кодом, который СОЗДАЕТ вашу функцию, а не сам код функции (который выполняется только при вызове функции).

IOW, с этим условием, функция SSFBasis определяется ТОЛЬКО, когда ваш файл выполняется как скрипт.

- действительно, это то, что я хочу, чтобы произошло.

Очевидно, что не xD

Но, учитывая, что я тогда явно вызываю функцию, разве не должно быть хорошо, распознавая функцию,

ВС этой точки зрения эта функция НЕ существует - вообще. Он не был определен.Это совершенно неизвестно.Никто никогда не слышал об этом.Это отсутствует.Это было потеряно в вакууме.Это было стерто из царств реальности.Это не функция .

0 голосов
/ 22 января 2019

TL; DR: определить ваши экспортированные значения и функции за пределами if __name__=='main.

В настоящее время вы определяете SSFBasisFunc() внутри части скрипта, которая не запускается при импорте, поэтому вы не можете получить к ней доступ в другом скрипте, который начинается с import SSFBasis.

Правильное использование будет:

In 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

Вы также можете проверить что делает if __name__=="main"? 1022 *

...