Python 我如何捕获我';你还没有完全进口吗?
通常,如果我导入了Python 我如何捕获我';你还没有完全进口吗?,python,exception,try-catch,Python,Exception,Try Catch,通常,如果我导入了套接字,我将能够轻松捕获异常: >>> import socket >>> try: ... socket.gethostbyname('hello') ... except socket.gaierror: ... print('oops') ... oops 但是如果我只导入socket.gethostbyname,它将不起作用: >>> from socket import gethostbyname
套接字
,我将能够轻松捕获异常:
>>> 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
>>从套接字导入gethostbyname
>>>尝试:
... gethostbyname('hello')
... 除socket.gai错误外:
... 打印('oops')
...
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
NameError:未定义名称“套接字”
如果我试图捕捉gaierro
,我也会得到一个namererror
有什么解决办法吗?是否无法用字符串捕获异常(例如除了“socket.gaierro”之外的
:
)?在这种情况下,您应该使用:从socket导入gethostbyname,gaierro
,然后重试:
except gaierror:
print('oops')
这是因为来自套接字导入gethostbyname的等效于:
import socket
gethostbyname=socket.gethostbyname
del socket
因此,socket
将从名称空间中删除,您将得到namererror
如果您不想导入完整模块,您也可以简单地导入异常。PEP8声明允许您这样做
from socket import gethostbyname, gaierror