如何解决如何防止在 Python 中引发自定义异常?
我一直在处理自定义异常,但我想知道它如何根据变量是否存在来防止自身被引发。
例如。
class MyError(Exception):
def __init__(self,var):
if var == "prevent":
# Stop exception from being raised
raise MyError("prevent")
解决方法
您可以通过引发异常来中断任何控制流(包括本身正在初始化和引发异常的控制流),这使得在技术上可以防止在其自身的 init 中引发特定异常 通过让 init 引发一个不同的异常:
>>> class MyError(Exception):
... def __init__(self,var):
... if var == "prevent":
... raise ValueError("unacceptable to raise MyError right now")
...
>>> try:
... raise MyError("prevent")
... except MyError:
... print("UNACCEPTABLE!")
... except ValueError:
... print("okie dokie")
...
okie dokie
正如其他人所建议的那样,一种更典型的模式是在引发异常之前进行检查(这样你就可以完全避免引发任何异常)。把它放在一个包装异常的函数中是完全合理的,例如:
>>> class MyError(Exception):
... pass
...
>>> def maybe_raise_myerror(var):
... if var != "prevent":
... raise MyError
...
>>> maybe_raise_myerror("prevent")
>>> maybe_raise_myerror("foo")
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "<stdin>",line 3,in maybe_raise_myerror
__main__.MyError
这种模式的一个用途是一组验证器——你有有条件地引发不同异常的函数,这些异常对应于不同的验证错误,你在单个 try
块下按顺序调用它们,这将处理引发的第一个错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。