如何在Python中有条件地导入?

时间:2009-12-04 10:38:59

标签: python python-import

我想在C中做这样的事情:

#ifdef SOMETHING
do_this();
#endif

但在Python中,这不是jive:

if something:
    import module

我做错了什么?这首先是可能的吗?

4 个答案:

答案 0 :(得分:17)

应该可以正常工作:

>>> if False:
...     import sys
... 
>>> sys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
>>> if True:
...     import sys
... 
>>> sys
<module 'sys' (built-in)>

答案 1 :(得分:0)

在Python中有一个名为“Exception”的内置功能。根据您的需要:

try:

    import <module>

except:     #Catches every error
    raise   #and print error

有更复杂的结构,因此请在网上搜索更多文档。

答案 2 :(得分:0)

如果你得到这个:

NameError: name 'something' is not defined

那么这里的问题不是import语句,而是使用something,这个变量显然没有初始化。只要确保它被初始化为True或False,它就会起作用。

答案 3 :(得分:0)

在C构造中,条件定义#ifdef测试是否只存在“SOMETHING”,其中你的python表达式测试表达式的是True还是False,在我看来两个非常另外,C构造在编译时进行评估。

基于原始问题的“某事”必须是(存在和)评估为真或假的变量或表达式,正如其他人已经指出的那样,问题可能在于未定义的“某事”变量。所以python中“最接近的等价物”就像是:

if 'something' in locals(): # or you can use globals(), depends on your context
    import module

或(hacky):

try:
    something
    import module
except NameError, ImportError:
    pass # or add code to handle the exception

HTH