如果存在捕获所有异常的try-catch,是否有方法强制引发异常



我需要强制在执行以下操作的函数外部引发异常:

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)。所以不要那样做。

最新更新