如果您关心的只是管道破裂的错误,那么您可能想抓住socket.error
并简单地检查它是否确实是管道破裂的错误。
您可以使用errno
Python 2和Python 3中都存在的异常属性来执行此操作,这意味着您不需要使用不同的Python 2 vs. 3逻辑(我认为这样的意图会更加清晰):
import socket
import errno
try:
do_something()
except socket.error as e:
if e.errno != errno.EPIPE:
# Not a broken pipe
raise
do_something_about_the_broken_pipe()
如果您关心的不只是管道破裂,那么fourtheye的回答是恰当而惯用的。