gpt4 book ai didi

python - 在 Python 中引发异常的正确方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:00:50 26 4
gpt4 key购买 nike

下面是简单的代码:

import sys

class EmptyArgs(StandardError):
pass

if __name__ == "__main__":
# The first way to raise an exception
if len(sys.argv) == 1:
raise EmptyArgs
# The second way to raise an exception
if len(sys.argv) == 1:
raise EmptyArgs()

哪种方式是“更多”正确的?两者都在工作。注意:在我的真实代码中,异常与我声明的完全相同:没有消息和参数。

最佳答案

两者都是正确的;后一种形式允许您将参数附加到您的异常:

if len(sys.argv) == 1:
raise EmptyArgs('Specify at least 1 argument')

您还可以在 raise 语句中将参数作为第二个值作为元组传递:

if len(sys.argv) == 1:
raise EmptyArgs, ('Specify at least 1 argument',)

但单个非元组值也可以,并且被视为单个参数:

if len(sys.argv) == 1:
raise EmptyArgs, 'Specify at least 1 argument'

raise 的第三个值允许您指定备用回溯,然后使用该回溯代替将为代码中的当前位置生成的回溯:

if len(sys.argv) == 1:
raise EmptyArgs, ('Specify at least 1 argument',), traceback_object

查看 raise statement 的文档

请注意,当您为异常使用参数时,The Python styleguide PEP 8更喜欢你提供一个异常实例,而不是一个类:

When raising an exception, use raise ValueError('message') instead of the older form raise ValueError, 'message'.

The paren-using form is preferred because when the exception arguments are long or include string formatting, you don't need to use line continuation characters thanks to the containing parentheses. The older form will be removed in Python 3.

Python 3 将不再支持这种形式。

关于python - 在 Python 中引发异常的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com