2010-05-19 2 views
1

J'ai un drôle de problème que j'aimerais vous poser (gars ').python: importer des modules avec des instructions d'importation incorrectes => informations non exhaustives issues de ImportError

J'importe un module A qui importe un module B inexistant. Bien sûr, cela entraînera une erreur ImportError.

C'est ce que A.py ressemble

import B 

Maintenant, nous allons importer un

>>> import A 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/tmp/importtest/A.py", line 1, in <module> 
    import B 
ImportError: No module named B 

D'accord, sur le problème. Comment puis-je savoir si ImportError résulte de l'importation de A ou d'une importation corrompue dans A sans en regardant la représentation de chaîne de l'erreur. La différence est que soit A n'est pas là ou a des instructions d'importation incorrectes.

espère que vous pouvez me aider ...

Vive bb

Répondre

0

Vous pouvez également regarder l'arrière-trace, ce qui peut être examiné dans le code. Cependant, pourquoi voulez-vous savoir si l'un ou l'autre moyen ne fonctionne pas?

+0

Ceci est pour une sorte de système de plugin où les modules codés par l'utilisateur sont importés lors de l'exécution (en fonction de l'entrée de l'utilisateur) et peuvent exister mais être incorrectement implémentés par l'utilisateur. – bbb

+0

addition: je veux savoir si A_does_ existe en premier lieu – bbb

2

Il est le module imp dans le répertoire lib standard, pour que vous puissiez faire:

>>> import imp 
>>> imp.find_module('collections') 
(<_io.TextIOWrapper name=4 encoding='utf-8'>, 'C:\\Program Files\\Python31\\lib\\collections.py', ('.py', 'U', 1)) 
>>> imp.find_module('col') 
Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    imp.find_module('col') 
ImportError: No module named col 

qui soulève ImportError lorsque le module est introuvable. Comme il n'essaie pas d'importer ce module, il est complètement indépendant de savoir si ImportError sera levé par ce module particulier.

Et bien sûr il y a un imp.load_module pour charger réellement ce module.

+0

ça sonne prometteur, gros thx – bbb

Questions connexes