1

我的方法或功能如下:

findSomething(v)

在我没有找到任何东西或者最好定义我自己的异常的情况下引发 KeyError 是否合适?你怎么看?

我知道,这不是严格的技术问题,但他们说:“可读性很重要”,我需要知道其他人的想法。:)

4

3 回答 3

1

好吧,我想可读性更多地与你如何编码有关,比如你如何命名变量、函数等,你如何构建你的代码并对其进行注释。

但是,关于您遇到的异常处理问题:这些是我认为您应该考虑的事情:

1- 如果函数得到一个有效的输入并且没有找到任何你不应该抛出或定义异常的东西。您只需要返回一个表示您没有找到任何东西的值和/或只打印一条正确的消息。

2- 如果输入参数 v 无效,具体取决于它是从类实例化的对象还是仅是原始类型,您可以分别为其定义适当的异常或仅捕获内置异常。

于 2018-09-17T15:09:11.567 回答
1

If the nature of the Error is complex, and its use also repeats in other places in your code I would define a custom Error.

Just cause it's more readable to write:

raise MyError('reason for MyError')

Than:

raise ValueError('the is an Error of type MyError, and here is the reason...')

But if it's not a repeatable part of your code, and the error is clear, I would use ValueError (before KeyError).

于 2018-09-17T15:02:57.550 回答
1

可能会因为基于意见而关闭,但是。

我更喜欢将等限制KeyErrorValueError本地范围内,即不大于内部 1 个函数,最好是内部的逻辑块。

假设您在发生异常的原始位置的几层中捕获了 KeyError。它基本上没有给你任何信息,而且基本上可能发生在任何地方。调用另一个函数的函数不应该知道被调用者的实现细节。此外,您不是在编写代码来检查异常堆栈跟踪并在您的代码逻辑中使用它,是吗?

定义自定义异常使您有机会描述问题的位置和高级解释,如UserNotFoundor NoMatchingChannel。您将捕获它的代码将更深入地了解问题是什么以及如何处理它。

于 2018-09-17T15:05:16.267 回答