use*_*016 8 python exception try-catch
通常,如果我导入socket,我将能够轻松捕获异常:
>>> import socket
>>> try:
... socket.gethostbyname('hello')
... except socket.gaierror:
... print('oops')
...
oops
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是导入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
Run Code Online (Sandbox Code Playgroud)
NameError如果我试图抓住,我也会得到一个gaierror.
这有什么解决方法吗?是不是可以用字符串捕获异常(例如except 'socket.gaierror':)?
Tui*_*uim 20
如果您不想导入完整模块,您只需导入异常即可.PEP8声明您可以这样做.
from socket import gethostbyname, gaierror
Run Code Online (Sandbox Code Playgroud)
http://www.python.org/dev/peps/pep-0008/#imports
在这种情况下,您应该使用:from socket import gethostbyname,gaierror然后尝试:
except gaierror:
print('oops')
Run Code Online (Sandbox Code Playgroud)
那是因为from socket import gethostbyname相当于:
import socket
gethostbyname=socket.gethostbyname
del socket
Run Code Online (Sandbox Code Playgroud)
所以socket从命名空间中删除,你得到了NameError.
| 归档时间: |
|
| 查看次数: |
15739 次 |
| 最近记录: |