当前位置: 首页 > 知识库问答 >
问题:

Python:何时处理异常[重复]

茅曾琪
2023-03-14

我正试图找出处理异常的最具Python风格的方法。假设我们有一个长方法,它可以完成多个注册汽车的任务

例如

  1. 检索汽车详细信息
  2. 计算税款
  3. 发送确认电子邮件

调用方法是否应该处理异常:

 def process_car_registration(self, registration):
    try:
        car_details = self.retrieve_car_details(registration)
    except:
        car_details = None
        print("Cannot retrieve car details")

    try:
        car_tax = self.calculate_tax_due(registration)
    except:
        car_tax = None
        print("Cannot calculate tax due")

    try:
        self.send_confirmation_email(registration, car_details, car_tax)
    except:
        print("Cannot send confirmation email")


def calculate_tax_due(self, registration):
    return self.dal.get_car_tax(registration)

或者单个方法本身是否应该处理异常。如果在这个方法中有任何异常,我们只想记录下来(或者在这个例子中打印出来)并继续。

 def process_car_registration(self, registration):

        car_details = self.retrieve_car_details(registration)

        car_tax = self.calculate_tax_due(registration)

        self.send_confirmation_email(registration, car_details, car_tax)


def calculate_tax_due(self, registration):
    try:
        return self.dal.get_car_tax(registration)
    except:
        print("Cannot calculate tax due")
        return None

是一种方法比另一种方法更pythonic,还是归结为更具可读性?我更喜欢第二种方式,但我们似乎更频繁地使用第一种方式。

共有1个答案

唐海阳
2023-03-14

这两段代码的行为不同:第一段代码在取车失败后仍将尝试计算税款。如果您想要这种行为,基本上需要第一个版本,但是如果您不想要,那么使用这么多try-catch块可能没有意义

 类似资料:
  • 在我的代码中,所有请求都有一个超时期。对于每个请求,我都必须处理超时异常。有没有办法在请求中附加全局超时异常处理程序? 和上面一样,我每次都要处理超时和引发服务不可用。我想要一些通用的东西,每当超时发生,它将引起服务不可用。

  • 本文向大家介绍python 异常处理总结,包括了python 异常处理总结的使用技巧和注意事项,需要的朋友参考一下        最近,做个小项目经常会遇到Python 的异常,让人非常头疼,故对异常进行整理,避免下次遇到异常不知所措,以下就是对Python 异常进行的整理。 1.Python异常类    异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionErro

  • 虽然程序员可以用异常作为程序控制的替代方法,但异常处理应当只用于异常情况,处理程序组件中与这些异常处理没有直接关系的异常,处理函数、库、类等常用软件组件中的异常和组件本身不处理异常的情况,在大型系统中以统一方式处理异常。 编程技巧 13.3 对程序本身很容易处理的简单局部错误使用传统情误处理方法而不用异常处理。 软件工程视点 13.3 涉及库时,库函数调用者通常用特定错误处理方法处理库函数中产生的

  • 我有一个抛出检查异常的方法: 我正在尝试创建一个通用包装器,它将优雅地处理异常。 现在我正在使用,它给我编译时错误。我可能错过了什么?

  • 1.12.1 异常介绍: 即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常都不会被程序处理,都以错误信息的形式展现在这里: >>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: divis

  • 1 Python 异常处理参考 本节简单罗列 Python 语言中与异常处理有关的常用语句形式及用法。 发生错误时通常由系统自动抛出异常,但也可由程序自己抛出并捕获。 捕获并处理异常:try-except 发生错误时,如果应用程序没有预定义的处理代码,则由 Python 的缺省异常处理机制 来处理,处理动作是中止应用程序并显示错误信息。如果程序自己处理异常,可编写 try-except 语句来定义