2012-11-16 8 views
5

Normalmente, se ho importato socket, sarei stato in grado di catturare facilmente eccezioni:Come posso rilevare un'eccezione per un modulo che non ho completamente importato?

>>> import socket 
>>> try: 
...  socket.gethostbyname('hello') 
... except socket.gaierror: 
...  print('oops') 
... 
oops 

Ma se ho appena importare socket.gethostbyname, non funzionerà:

>>> from socket import gethostbyname 
>>> try: 
...  gethostbyname('hello') 
... except socket.gaierror: 
...  print('oops') 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
NameError: name 'socket' is not defined 

ho anche ottenere un NameError se provo a catturare gaierror.

C'è qualche soluzione per questo? Non è possibile rilevare un'eccezione con una stringa (ad esempio except 'socket.gaierror':)?

risposta

5

In questo caso si dovrebbe usare: from socket import gethostbyname,gaierror e quindi provare:

except gaierror: 
    print('oops') 

che è perché from socket import gethostbyname è equivalente a:

import socket 
gethostbyname=socket.gethostbyname 
del socket 

così socket viene rimosso dal dal namespace e si ottiene che NameError .

Problemi correlati