我有一个程序既可以作为模块运行,也可以作为独立文件运行,无需运行。
导入时,应导入一个名为' globalSettings.py'的文件。包含import_location = /Users/Documents/etc
之类的行将与它位于同一文件夹中。当它以__main__
运行时,它不会需要它。
因此,在我的代码开头,我有以下内容:
try:
import globalSettings
except ImportError:
print("Being run as independent program")
哪个好。
当我调用main函数时,如果是独立运行的话,我会直接将相关设置传递给它,并且它具有默认值,如果作为外部模块运行,它将被使用。
这是MCVE:
def test_func(foo, bar=globalSettings.import_location):
do stuff
我称之为:
if __name__ == "__main__":
test_func(20, "Users/myname/testfolder/etc")
当我从其他地方导入它时,例如test_func(30)
,它会从globalSettings中找到bar
。但是,当我独立运行它时,它会引发错误:
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,因为当我把它称为独立程序时,我总是将bar作为参数传递,当我将它作为导入运行时它只需要它,当我确定它时确实有一个globalSettings文件。
无论如何都要忽略我得到的错误?
答案 0 :(得分:1)
有条件地定义一个名称(globalSettings
)然后在脚本中无条件地使用(特别是函数定义)将失败。
您可以做的是确保默认参数始终存在,即使发生异常:
try:
import globalSettings
import_location = globalSettings.import_location
except ImportError:
print("Being run as independent program")
import_location = '' # or whatever else
然后定义您的函数,让import_location
作为bar
的默认值。