我需要强制在执行以下操作的函数外部引发异常:
def foo(x):
try:
some_calculation(x)
except:
print("ignore exception")
有没有办法覆盖foo
内部的catch-all?我想在some_calculation(x)
内部引发一个可以在foo
外部捕获或检测到的异常。
仅供参考,foo
是我无法控制的第三方功能。
否。您的选择是:
- 向库维护人员提交修复程序
- 分叉库,并提供您自己的供应商版本
- monkey在导入时修补库
最后一个可能是最容易、最快的起床和跑步。
示例:
main.py
# before doing anything else import and patch the third party library
# we need to patch foo before anyone else has a chance to import or use it
import third_party_library
# based off of third_party_library version 1.2.3
# we only catch Exception rather than a bare except
def foo(x):
try:
some_calculation(x)
except Exception:
print("ignore exception")
third_party_library.foo = foo
# rest of program as usual
...
如果foo()
在几个不同的模块之间重新导出(如果第三方库有自己的from <x> import foo
语句(,情况可能会稍微复杂一些。但如果只是需要monkey修补各种重新导出模块的更多属性。
从技术上讲,可以强制引发异常,但这将涉及设置执行跟踪并强制在foo()
的异常处理代码中抛出异常。奇怪的是,异常似乎来自print("ignore exception")
,而不是some_calculation(x)
。所以不要那样做。