我应该使用内置异常还是定义我自己的异常?
Should I use builtin exception or define my own?
我有这样的方法或函数:
findSomething(v)
在我找不到任何东西的情况下引发 KeyError 是否合适,或者最好定义我自己的异常?你怎么看?
我知道,这不是严格意义上的技术问题,但他们说:'Readability counts'我需要知道其他人的想法。 :)
如果错误的性质很复杂,并且它的使用也在代码的其他地方重复,我会定义一个自定义错误。
只是因为写起来更可读:
raise MyError('reason for MyError')
比:
raise ValueError('the is an Error of type MyError, and here is the reason...')
但如果它不是代码的可重复部分,并且错误很明显,我会使用 ValueError(在 KeyError 之前)。
可能会因为基于意见而关闭,但是。
我更喜欢将 KeyError
、ValueError
等限制在局部范围内,即不大于 1 个函数内部,最好是内部逻辑块。
假设您从发生异常的原始位置捕获了几个层的 KeyError。
它基本上不会给你任何信息,而且基本上任何地方都可能发生。
调用另一个函数的函数不应该知道被调用者的实现细节。
另外,您不是在编写代码来检查异常堆栈跟踪并在您的代码逻辑中使用它,是吗?
定义自定义异常让您有机会描述问题的位置和高级解释,例如 UserNotFound
或 NoMatchingChannel
。
您将捕获它的代码将更深入地了解问题是什么以及如何处理它。
好吧,我想可读性更多地与你的编码方式有关,比如说你如何命名变量、函数等,你如何构建你的代码并对其进行注释。
但是,关于您遇到的异常处理问题:这些是我认为您应该考虑的事情:
1- 如果函数获得有效输入但未找到您不应抛出或定义异常的任何内容。您只需要 return 一个表示您没有找到任何东西的值 and/or 只需打印一条正确的消息即可。
2- 如果输入参数 v 无效,具体取决于它是从 class 实例化的对象还是只是原始类型,您可以为它定义一个适当的异常或只捕获一个内置的 -分别例外。
我有这样的方法或函数:
findSomething(v)
在我找不到任何东西的情况下引发 KeyError 是否合适,或者最好定义我自己的异常?你怎么看?
我知道,这不是严格意义上的技术问题,但他们说:'Readability counts'我需要知道其他人的想法。 :)
如果错误的性质很复杂,并且它的使用也在代码的其他地方重复,我会定义一个自定义错误。
只是因为写起来更可读:
raise MyError('reason for MyError')
比:
raise ValueError('the is an Error of type MyError, and here is the reason...')
但如果它不是代码的可重复部分,并且错误很明显,我会使用 ValueError(在 KeyError 之前)。
可能会因为基于意见而关闭,但是。
我更喜欢将 KeyError
、ValueError
等限制在局部范围内,即不大于 1 个函数内部,最好是内部逻辑块。
假设您从发生异常的原始位置捕获了几个层的 KeyError。 它基本上不会给你任何信息,而且基本上任何地方都可能发生。 调用另一个函数的函数不应该知道被调用者的实现细节。 另外,您不是在编写代码来检查异常堆栈跟踪并在您的代码逻辑中使用它,是吗?
定义自定义异常让您有机会描述问题的位置和高级解释,例如 UserNotFound
或 NoMatchingChannel
。
您将捕获它的代码将更深入地了解问题是什么以及如何处理它。
好吧,我想可读性更多地与你的编码方式有关,比如说你如何命名变量、函数等,你如何构建你的代码并对其进行注释。
但是,关于您遇到的异常处理问题:这些是我认为您应该考虑的事情:
1- 如果函数获得有效输入但未找到您不应抛出或定义异常的任何内容。您只需要 return 一个表示您没有找到任何东西的值 and/or 只需打印一条正确的消息即可。
2- 如果输入参数 v 无效,具体取决于它是从 class 实例化的对象还是只是原始类型,您可以为它定义一个适当的异常或只捕获一个内置的 -分别例外。