2009-12-04 4 views
1

Je veux faire quelque chose comme ça dans C:comment faire une importation conditionnelle en Python?

#ifdef SOMETHING 
do_this(); 
#endif 

Mais en Python cela ne jive:

if something: 
    import module 

Qu'est-ce que je fais mal? Est-ce possible en premier lieu?

+1

Il serait utile d'inclure un message d'erreur. –

Répondre

17

Il devrait fonctionner correctement:

>>> 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

En Python il y a une fonctionnalité intégrée appelée « Exception » .. L'application à vos besoins:

try: 

    import <module> 

except:  #Catches every error 
    raise #and print error 

Il existe des structures plus complexes de recherche etc. le web pour plus de documentation.

0

Si vous obtenez ceci:

NameError: name 'something' is not defined 

le problème est pas avec la déclaration import ici, mais avec l'utilisation de something, une variable que vous avez apparemment pas initialisé. Assurez-vous simplement qu'il est initialisé à True ou False, et cela fonctionnera.

0

Dans la construction C, le conditionnel définissent #ifdef teste si « quelque chose » existe seulement, où vos tests d'expression python si la valeur de l'expression est vrai ou faux, à mon avis, deux choses très différentes, en De plus, la construction C est évaluée au moment de la compilation. "Quelque chose" basé sur votre question initiale doit être une variable ou une expression qui (existe et) évalue à vrai ou faux, comme d'autres personnes l'ont déjà signalé, le problème peut être que cette variable "quelque chose" n'est pas définie. de sorte que le "le plus proche équivalent" en python serait quelque chose comme:

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

ou (hacky):

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

HTH

Questions connexes