有没有办法在python中“取消引发”异常?

时间:2016-12-20 01:54:53

标签: python

我无法控制不必要地引发某个异常的python库。

有没有办法用“安慰剂”Exception子类来处理它?即。

class MyException(Exception):
    def __init__(self, value):
        # literally do nothing. return to program flow
        pass

2 个答案:

答案 0 :(得分:5)

  

引发某些异常

您有某些异常,您应该通过在try-except块的except子句中指定异常类来处理异常。

安慰剂方法(即except Exception...)只会沉默其他异常,因为异常通常来自Exception或根本不起作用(与您的新异常类)因为引发的异常显然不是从新的异常类派生的。

请记住:

  

除非明确地沉默,否则错误不应该默默传递

所以我不明白为什么你想要在没有try-except的情况下撤销一个引发的异常。没有提出例外情况。

如果您希望每次调用此库中的函数时都避免使用try-except,那么您可以编写一个包装函数,用try-except包装调用,然后使用今后的新功能。

from somelib import func
from somelib import SomeException


def wrapper_func(*args, **kwargs):
    try:
         func(*args, **kwargs)
    except SomeException:
         pass

答案 1 :(得分:0)

虽然另一个答案是正确的,但如果你正在处理一些奇怪/错误的模块,你可以试试fuckitpy

请注意,让异常无声地传递通常是一个非常糟糕的主意。

无论如何,使用fuckitpy的基本方法是(引用文档):

import fuckit
#import some_shitty_module
fuckit('some_shitty_module')
some_shitty_module.some_function()

同样来自文档:

  

仍有错误?连锁fuckit电话。这个模块就像暴力:如果它不起作用,你只需要更多它。

import fuckit
fuckit(fuckit('some_shitty_module'))
# This is definitely going to run now.
some_shitty_module.some_function()

fuckitpy (GitHub)https://github.com/ajalt/fuckitpy