как сделать импорт условно в Python? - PullRequest
1 голос
/ 04 декабря 2009

Я хочу сделать что-то подобное в C:

#ifdef SOMETHING
do_this();
#endif

Но в Python это не джайв:

if something:
    import module

Что я делаю не так? Возможно ли это в первую очередь?

Ответы [ 4 ]

17 голосов
/ 04 декабря 2009

Должно работать нормально:

>>> 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)>
0 голосов
/ 05 декабря 2009

В конструкции C условное определение #ifdef проверяет, существует ли только «SOMETHING», где ваше выражение на python проверяет, является ли значение выражения истинным или ложным, на мой взгляд два очень разных Кроме того, конструкция C вычисляется во время компиляции.

«что-то», основанное на вашем исходном вопросе, должно быть переменной или выражением, которое (существует и) оценивается как истинное или ложное, как уже отмечали другие люди, проблема может быть в том, что эта переменная «что-то» не определена. поэтому «ближайший эквивалент» в python будет выглядеть примерно так:

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

или (хаки):

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

НТН

0 голосов
/ 04 декабря 2009

Если вы получаете это:

NameError: name 'something' is not defined

тогда проблема здесь не в операторе import, а в использовании something, переменной, которую вы, очевидно, не инициализировали. Просто убедитесь, что он инициализирован как True или False, и он будет работать.

0 голосов
/ 04 декабря 2009

В Python есть встроенная функция, называемая «Исключение». Применение к вашим потребностям:

try:

    import <module>

except:     #Catches every error
    raise   #and print error

Существуют более сложные структуры, поэтому ищите в Интернете дополнительную документацию.

...