通常,如果导入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
如果我试图捕捉gaierror
,我也会得到NameError
。
有办法解决这个问题吗?是否不能用字符串捕捉异常(例如except 'socket.gaierror':
)?
如果不想导入整个模块,也可以简单地导入异常。PEP8规定你可以这么做。
http://www.python.org/dev/peps/pep-0008/#imports
在这种情况下,您应该使用:
from socket import gethostbyname,gaierror
,然后尝试:这是因为
from socket import gethostbyname
相当于:因此
socket
从名称空间中移除,您将得到NameError
。相关问题 更多 >
编程相关推荐