Ber*_*ard 9 python exception-handling exception
在Python中处理不同的异常类型时,避免代码重复的好方法是什么,例如.我想要处理URLError和HTTPError模拟但不完全:
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想避免重复第一次logger.error调用.鉴于URLError是HTTPError的父级,可以执行以下操作:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用例如.如果URLError和HTTPError不在继承链中:
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
Run Code Online (Sandbox Code Playgroud)
我应该选择哪一种,还有另一种更好的方法吗?
Tim*_*ker 10
我认为你的第三个例子是最好的解决方案.
except FooError as err但是,如果您使用的是Python 2.6或更高版本,则可能需要使用较新的语法.
此外,在您的示例中,第一个版本不完全正确,因为URLError处理程序已经捕获HTTPError,因此except HTTPError永远不会到达该部分.你必须切换两个excepts.不使用此的另一个原因.