10

通常,如果我 import socket,我将能够轻松捕获异常:

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

但是,如果我只是 import socket.gethostbyname,它将无法正常工作:

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

NameError如果我尝试抓住,我也会得到一个gaierror

有什么解决方法吗?except 'socket.gaierror':不能用字符串(例如。 )捕获异常吗?

4

2 回答 2

26

如果您不想导入完整的模块,您也可以简单地导入异常。PEP8 声明您可以这样做。

from socket import gethostbyname, gaierror

http://www.python.org/dev/peps/pep-0008/#imports

于 2012-11-16T09:00:02.010 回答
6

在这种情况下,您应该使用 :from socket import gethostbyname,gaierror然后尝试:

except gaierror:
    print('oops')

那是因为from socket import gethostbyname相当于:

import socket
gethostbyname=socket.gethostbyname
del socket

所以socket从命名空间中删除,你得到了NameError.

于 2012-11-16T08:57:12.990 回答