在 Python 中,异常是在程序执行期间发出错误或异常情况信号的一种方式。要手动引发异常,请使用 raise 语句。
要引发异常,请使用最能描述您的问题的特定 Exception 类的构造函数。例如:
raise ValueError('A very specific bad thing happened.')
这允许您提供自定义的错误消息,从而更容易识别罪魁祸首。
避免引发通用异常类似异常的异常。这些变得很难捕获,因为您还必须捕获所有子类化的、更具体的异常。
将 raise 语句与最具体的异常构造函数一起使用,适合你的情况。您还可以将参数传递给构造函数:
raise ValueError('A very specific bad thing happened', 'foo', 'bar', 'baz')
可以使用 Exception 对象的 args 属性检索这些参数。
处理异常时,您可能需要记录特定错误并重新引发它们。使用裸提升语句保留堆栈跟踪:
logger = logging.getLogger(__name__) try: do_something_in_app_that_breaks_easily() except AppError as error: logger.error(error) raise # just this! # raise AppError # Don't do this, you'll lose the stack trace!
虽然可以使用 sys.exc_info() 修改错误,但更喜欢裸提升来保留堆栈跟踪。使用线程时,这可能会特别成问题,因为您可能会捕获错误的回溯。
在 Python 3 中,您可以链接异常以保留回溯:
raise RuntimeError('specific message') from error
避免以下方法,因为它们可以默默地捕获和隐藏错误或甚至默默地引发错误的异常:
raise ValueError, 'message' # Deprecated raise 'message' # Seriously wrong, don't do this
针对不正确的 API 使用引发异常的示例:
def api_func(foo): '''foo should be either 'baz' or 'bar'. returns something very useful.''' if foo not in _ALLOWED_ARGS: raise ValueError('{foo} wrong, use "baz" or "bar"'.format(foo=repr(foo)))
您可以定义自定义错误类型来指示特定的应用程序相关错误:
class MyAppLookupError(LookupError): '''raise this when there's a lookup error for my app'''
以上是如何在 Python 中有效引发异常?的详细内容。更多信息请关注PHP中文网其他相关文章!