gpt4 book ai didi

python - (OSError) 异常处理 (ConnectionRefusedError) 错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:12 24 4
gpt4 key购买 nike

我正在尝试使用 Python 捕获套接字连接中的错误。我需要处理两种不同类型的错误[ ConnectionRefusedError, OSError ]。我想对每个错误执行不同的操作,所以我用 (try except) 语句执行,并且当代码如下所示时[首先写入哪个(OSError)异常],只有即使错误是 (ConnectionRefusedError),也会引发第一个异常[即 (OSError)]
代码:

for ip in ips:
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try :
sock.connect((ip,12345))
print("Up.")
up.append(ip)
sock.close()
except OSError:
print("Down.")
raise
except ConnectionRefusedError:
print("Up.")
up.append(ip)
except Exception as e:
print(e)
  • Output : Down.
  • Raised Error : ConnectionRefusedError: [Errno 111] Connection refused

因此,[OSError] 异常中的 raise 语句引发了 [ConnectionRefusedError](这是下一个异常语句!)。

。但是当我首先交换异常并写入 (ConnectionRefusedError) 时,它工作正常:

for ip in ips:
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try :
sock.connect((ip,port))
print("Up.")
sock.close()
except ConnectionRefusedError:
print("Up.")
up.append(ip)
except OSError:
print("Down.")
raise
except Exception as e:
print(e)

那么,为什么 OSError 异常在第一种情况下处理 ConnectionRefusedError ?有没有办法先写OSError异常然后立即生效?

最佳答案

ConnectionRefusedError继承自OSError ,所以 except接受 OSError 的子句可以匹配 ConnectionRefusedError正好;特别是考虑到 except子句按照其编写顺序进行测试,如果 OSError首先写入子句,它将匹配 ConnectionRefusedError总是异常(exception)。

没有办法解决这个问题1,因此作为一般规则,您希望始终在更通用的异常处理程序之前编写更具体的异常处理程序。

<小时/>
  1. 要在一般情况下“修复”此问题,解释器必须根据异常子句的继承关系对子句进行拓扑排序,可能会拆分指定多个异常的子句,并且考虑到异常子句的动态性质语言,在运行时执行此操作,减慢很少重要的功能的异常。

关于python - (OSError) 异常处理 (ConnectionRefusedError) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com