【发布时间】:2019-06-01 15:16:21
【问题描述】:
我正在尝试使用 Python 捕获套接字连接中的错误。我需要处理两种不同类型的错误 [ ConnectionRefusedError, OSError ]。我想对每个错误执行不同的操作,所以我用 (try except) 语句来做,并且当代码如下所示[首先编写哪个(OSError)异常]时,只有第一个异常 [Which Is (OSError)] 即使错误是 (ConnectionRefusedError) 也会引发
代码:
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)
- 输出:向下。
- 引发错误:ConnectionRefusedError:[Errno 111] 连接被拒绝
因此引发了 raise 语句的 [OSError] 异常 [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 异常并立即生效?
【问题讨论】:
-
您不应该将英语中的每个单词都大写。它应该看起来像这样。它不应该是这样的。
标签: python python-3.x exception-handling try-except