当前位置: 首页 > 面试题库 >

Python-我应该总是在`except`语句中指定异常类型吗?

计光赫
2023-03-14
问题内容

使用PyCharm IDE时,使用except:无异常类型会触发IDE提醒此异常子句为Too broad

我应该忽略这个建议吗?还是总是特定于异常类型的Pythonic


问题答案:

指定一个显式异常类型几乎总是更好。如果使用裸except:子句,则最终可能会捕获到你期望捕获的异常以外的异常-这可能会隐藏错误或使程序无法按预期运行时更难以调试。

例如,如果要在数据库中插入行,则可能需要捕获一个异常,该异常表明该行已存在,因此可以进行更新。

try:
    insert(connection, data)
except:
    update(connection, data)

如果指定了指标裸机except:,则还将捕获一个套接字错误,该错误指示数据库服务器已倒塌。最好只捕获你知道如何处理的异常-程序在异常发生时失败通常比继续执行但以奇怪的意外方式执行更好。

你可能希望使用裸机的一种情况except:是始终需要运行的程序的顶层,例如网络服务器。但是随后,你需要非常小心地记录异常,否则将无法找出问题所在。基本上,执行此操作的程序中最多只能有一个位置。

其推论这一切是你的代码不应该这样做raise Exception('some message'),因为它迫使客户端代码使用except:(或except Exception:这是几乎一样糟糕)。你应该定义一个特定于你要发信号的问题的异常(也许从某些内置的异常子类(如ValueErrorTypeError)继承)。或者,你应该引发特定的内置异常。这使你的代码用户可以小心地捕获他们想要处理的异常。



 类似资料:
  • 我让我的程序工作并全部完成(java)。这是一个简短而简单的工作面试程序。我通过抛出自定义异常来处理诸如不正确的输入格式之类的事情。这是最好的方法还是我应该只做一个打印声明?

  • 问题内容: 这是将python“ with”语句与try-except块结合使用的正确方法吗? 如果是这样,请考虑使用旧的处理方式: 这里的“ with”语句的主要好处是我们可以摆脱三行代码吗? 对于这个用例,这 似乎并不吸引我(尽管我知道“ with”语句还有其他用途)。 编辑:以上两个代码块的功能是否相同? EDIT2:前几个答案大体上谈及使用“ with”的好处,但是这里似乎没有什么好处。我

  • 你看?我应该编写多少额外的代码来向Api客户端返回正确的响应?此外,我可以忘记捕获一些可以正确报告的异常,它将作为默认的内部服务器异常返回。在controller中,我总是应该查看服务层,并检查哪些异常可以引发服务以正确处理它们。(请不要建议在java中检查异常)。 现在让我们来看看另一种解决方案: 在服务层(模型)中使用HttpStatus引发异常 就这样了。代码更少。现在我不必处理每一个可能引

  • 问题内容: 是否可以定义输入时间,例如时间,日期,货币或应手动验证?例如: ..在这里(仅)需要时间,如何确保用户以xx:xx格式输入输入,其中xx仅是整数。 问题答案: (在Python 2.any中)将返回用户键入的任何表达式的类型。更好的方法(在Python 2.any中)将使用,它返回一个字符串,然后自己进行转换,并在转换失败时捕获。 Python 3.any的工作方式与2.any的类似,

  • 我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。 >>> s = raw_input('Enter something --> ') Enter something --> Traceback (most recent call last):   File "<stdin>", line 1, in ? EOFError Python引发了一个称为EOFError的错误,这个错误基本

  • 根据 的来源,如果发生错误,将引发异常。 在的大多数示例中,没有使用try-catch,如下所示。为什么不需要错误处理?它安全吗?