我有一个模块定义了一个从Exception
继承的类。我和组织中的其他人广泛使用此模块,现在可以清楚地看到,对于某些定义良好的条件,当引发异常时,程序发出警告并继续执行而不是终止执行是合适的
希望而不是要求所有用户在允许继续执行时使用此异常管理的所有位置添加try-except
子句。条件在引发时传递给异常
下面是一个我正在尝试做的简单示例
class ConditionalException(Exception):
def __init__(self,condition):
self.condition=condition
pass
def __str__(self):
return 'Condition: {}'.format(self.condition)
def raiseConditionalException():
condition=0
raise ConditionalException(condition) # should just give warning and continue execution
condition=1
raise ConditionalException(condition) # should be fatal
condition=2
raise ConditionalException(condition) # should never reach this point
raiseConditionalException()
这是可能的,还是完全违背了引发异常并要求用户在处理异常时显式的原则
我试图查看Exception和BaseException类定义(https://docs.python.org/3/library/exceptions.html),但我无法准确识别引发异常时会发生什么(例如,Exception
内置类的哪些内部方法可以在用户定义的异常中修改)
谢谢大家!
编辑
我应该提到,如果可以从不同的类继承,比如Warning
(尽管我认为Warning
也从BaseException
继承,所以我不确定如何使发出警告不致命),并实现相同的预期结果,那么也没关系。我尝试从Warning
继承,但它的行为仍然像我从Exception
继承的一样
一个有趣的细节是当我键入help(Exception)
时,它说的第一件事是
class Exception(BaseException)
| Common base class for all non-exit exceptions.
|
| Method resolution order:
| Exception
| BaseException
| object
上面写着“不退出”???如果不退出,不退出意味着什么
如果需要警告,请使用警告。不要提出例外。定义一个单独的警告级别:
当您希望发出警告而不是引发以下问题时,请使用
warnings.warn
而不是raise
:您尝试使用
Warning
失败,因为您仍然试图raise
警告,而不是通过警告系统相关问题 更多 >
编程相关推荐