2012-11-16 14 views
5

Normalnie, jeśli importowany socket, byłbym w stanie łatwo złapać wyjątki:Jak wychwycić wyjątek dla modułu, którego nie w pełni zaimportowałem?

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

Ale jeśli po prostu importować socket.gethostbyname, to nie będzie działać:

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

ja również uzyskać NameError jeśli spróbuję złapać gaierror.

Czy istnieje sposób obejścia tego problemu? Czy nie można wychwycić wyjątku z ciągiem znaków (np. except 'socket.gaierror':)?

Odpowiedz

5

W tym przypadku należy użyć: from socket import gethostbyname,gaierror a następnie spróbuj:

except gaierror: 
    print('oops') 

to dlatego from socket import gethostbyname odpowiada:

import socket 
gethostbyname=socket.gethostbyname 
del socket 

tak socket jest usuwany z od nazw i masz, że NameError .

Powiązane problemy