Python 异常中的奇怪布尔值
Strange boolean value in Python Exception
最近我在工作中使用的一个存储库中发现了一段奇怪的代码。在这部分中,使用布尔值引发异常:
if current_run_row_count == 0:
raise InconsistentData(
"0 rows found", False,
)
InconsistentData
继承自 Exception
class:
class InconsistentData(Exception):
pass
我不明白这个 False
对应异常 raise 的作用。
首先我的猜测是这个异常是否真的是一个警告是某种标志(我想我可能听说过这样的话)。如果是True
,则异常停止程序执行,如果是False
,则不停止并作为警告。反之亦然,但想法是一样的。但是,我在 Python 文档中找不到有关 Exception
参数的任何信息 - 例如,here and here.
其次,我想也许这个 False
什么也没做,似乎是错误消息的一部分。我用两个不同的代码示例对其进行了测试。
第一个:
if 1 == 1:
raise Exception("error", False)
print('Hello!')
输出:
Exception: ('error', False)
第二个:
if 1 == 1:
raise Exception("error", True)
print('Hello!')
输出:
Exception: ('error', True)
所以,在两个代码示例中,都引发了异常并停止了程序执行,并且这个布尔值似乎是错误消息的一部分。但是,根据代码,我不知道为什么会有人将它包含在错误消息中。除了 InconsistentData
,还有另外两个自定义异常:CustomException
和 ValidationError
,当它们被引发时,它们没有任何布尔值,只有一条用文本表示的错误消息。
这可能是第二个选项——“这个 False 什么都不做,似乎是错误消息的一部分”。我会接受 @deceze 回答:
It means whatever the author wants it to mean. It has no influence on the exception as such, as you have correctly identified. It's just additional data.
最近我在工作中使用的一个存储库中发现了一段奇怪的代码。在这部分中,使用布尔值引发异常:
if current_run_row_count == 0:
raise InconsistentData(
"0 rows found", False,
)
InconsistentData
继承自 Exception
class:
class InconsistentData(Exception):
pass
我不明白这个 False
对应异常 raise 的作用。
首先我的猜测是这个异常是否真的是一个警告是某种标志(我想我可能听说过这样的话)。如果是True
,则异常停止程序执行,如果是False
,则不停止并作为警告。反之亦然,但想法是一样的。但是,我在 Python 文档中找不到有关 Exception
参数的任何信息 - 例如,here and here.
其次,我想也许这个 False
什么也没做,似乎是错误消息的一部分。我用两个不同的代码示例对其进行了测试。
第一个:
if 1 == 1:
raise Exception("error", False)
print('Hello!')
输出:
Exception: ('error', False)
第二个:
if 1 == 1:
raise Exception("error", True)
print('Hello!')
输出:
Exception: ('error', True)
所以,在两个代码示例中,都引发了异常并停止了程序执行,并且这个布尔值似乎是错误消息的一部分。但是,根据代码,我不知道为什么会有人将它包含在错误消息中。除了 InconsistentData
,还有另外两个自定义异常:CustomException
和 ValidationError
,当它们被引发时,它们没有任何布尔值,只有一条用文本表示的错误消息。
这可能是第二个选项——“这个 False 什么都不做,似乎是错误消息的一部分”。我会接受 @deceze 回答:
It means whatever the author wants it to mean. It has no influence on the exception as such, as you have correctly identified. It's just additional data.