通常情况下,如果我导入socket
,我就可以轻松捕获异常:
>>> import socket
>>> try:
... socket.gethostbyname('hello')
... except socket.gaierror:
... print('oops')
...
oops
但是,如果我只是导入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':
)?
答案 0 :(得分:19)
如果您不想导入完整模块,您只需导入异常即可。 PEP8声明您可以这样做。
from socket import gethostbyname, gaierror
答案 1 :(得分:5)
在这种情况下,您应该使用:from socket import gethostbyname,gaierror
,然后尝试:
except gaierror:
print('oops')
那是因为from socket import gethostbyname
等同于:
import socket
gethostbyname=socket.gethostbyname
del socket
因此socket
已从命名空间中删除,您将获得NameError
。