python-3.x - 如何在函数执行完成后引发异常并捕获它?
问题描述
我的代码中有一行可能引发异常,我想处理这个执行并继续执行。
def foo():
#good code
if thingThatHappensSometimes:
raise CustomException
#code i want to execute
return resultIwant
def bar():
resultIwant = None
try:
#good code
resultIwant = foo()
except CustomException:
#code that should run if an exception was raised
finally:
print(resultIwant)
print('All done!')
我的问题是在某些情况下 foo 会引发异常,但代码逻辑中没有任何内容阻止它为 resultIwant 生成结果。目前,如果我在 bar 中处理异常,我将不会到达 foo 的执行结束,但如果我在 foo 中处理异常,则异常将已经被处理,并且我不会到达 bar 中的 except 块。有没有办法解决这个问题?
解决方案
引发异常此时会停止执行,因此您不能既引发异常又返回值。但是你可以返回一个(value, exception_or_none)
元组:
def foo():
error = None
#good code
if thingThatHappensSometimes:
error = CustomException()
#code i want to execute
return resultIwant, error
def bar():
#good code
resultIwant, error = foo()
if error:
#code that should run if an exception was raised
print(resultIwant)
print('All done!')
推荐阅读
- c# - 如何搜索 json 文件 C#?
- java - 强制接口实现首先运行方法
- c++ - C++ 谷物保存/load_and_construct 不工作
- java - (Java) 使用 ActionListeners 创建多个 (26) 按钮而不重复代码
- python - 如何在没有身份验证或权限的情况下创建 Django 可浏览 REST API?
- android - MPAndroidChart 标签位置
- web-services - wsimport 实用工具如何在后端创建具有包结构的类?这背后的背景机制是什么?
- kubernetes - 来自 openstack.org/standalone-cinder 的provisioner kubernetes.io/cinder 之间的区别
- java - Drive API:更改所有者时权限不足
- angular5 - 安装特定的角度版本不起作用(Angular 5.2.10)