Python:何时处理异常

时间:2018-08-12 12:12:27

标签: python

我正在尝试找出处理异常的最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 个答案:

答案 0 :(得分:0)

这两个代码的行为有所不同:第一个代码在提取汽车失败后仍会尝试计算税收。如果您想要这种行为,则本质上需要第一个版本,但如果不需要,那么那么多的try-catch块可能毫无意义