У меня есть программа, которая может быть запущена как модуль или как независимый файл, в котором ничего не нужно запускать.Как я могу избежать интерпретатора, проверяющего аргументы по умолчанию функции?
Когда он импортируется, он должен импортировать файл с именем globalSettings.py, который содержит строки, такие как import_location = /Users/Documents/etc
, которые будут находиться в той же папке, что и он. Когда он запускается как __main__
, ему это не понадобится.
Так, в начале моего кода, у меня есть следующие:
try:
import globalSettings
except ImportError:
print("Being run as independent program")
Какой штраф.
Когда я вызываю основную функцию, я передаю соответствующие настройки прямо на нее, если она выполняется независимо, и она имеет значения по умолчанию, которые будут использоваться при запуске в качестве внешнего модуля.
Это MCVE:
def test_func(foo, bar=globalSettings.import_location):
do stuff
и я называю это так:
if __name__ == "__main__":
test_func(20, "Users/myname/testfolder/etc")
И когда я импортировать его из других стран, как test_func(30)
, и он найдет bar
от GlobalSettings. Однако, когда я запускаю его самостоятельно, то возникает ошибка:
Traceback (most recent call last):
File "/Users/tomburrows/Dropbox/Python Programming/import_test.py", line 1, in <module>
def test_func(foo, bar=globalSettings.import_location):
NameError: name 'globalSettings' is not defined
Он никогда не будет нуждаться в GlobalSettings, потому что я всегда буду проходить бар в качестве аргумента, когда я называю его в качестве самостоятельной программы, то потребуется только его когда я запускаю его как импорт, когда я убеждаюсь, что он имеет файл globalSettings вместе с ним.
Есть ли в любом случае игнорировать ошибку, которую я получаю?
В вашей программе может быть более одного 'if __name__ ==" __main __ ":', поэтому вы можете использовать его для определения функции по-другому. т. е. добавьте один из двух определений 'test_func()', который делает по умолчанию что-то другое (или не дает его вообще, если это имеет смысл) в соответствующем случае. – martineau