如何捕获尚未完全导入的模块的异常?

2024-05-16 23:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

通常,如果导入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':)?


Tags: fromimportmosthellosocketcallprintoops
2条回答

如果不想导入整个模块,也可以简单地导入异常。PEP8规定你可以这么做。

from socket import gethostbyname, gaierror

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

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

except gaierror:
    print('oops')

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

import socket
gethostbyname=socket.gethostbyname
del socket

因此socket从名称空间中移除,您将得到NameError

相关问题 更多 >