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