【问题标题】:Python: When to handle exceptions [duplicate]Python:何时处理异常[重复]
【发布时间】:2019-01-19 09:07:34
【问题描述】:

我正在尝试找出处理异常的最 Pythonic 方式。假设我们有一个很长的方法来完成与注册汽车有关的多项任务

例如

  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.为什么要在异常后继续?如果您未能检索汽车详细信息,如何计算应缴税款? 2. 这样做会阻止您查看异常是什么以及发生的位置。
  • 这只是一个通用的例子,看看其他人如何处理异常。但是,假设您可以从注册中获得税款,而无需汽车详细信息。所以最后发送的电子邮件只会发送税务详细信息而不是汽车详细信息。
  • 处理异常的位置完全取决于应用程序。没有一种万能的方法。您可以在您的应用程序要求表明需要处理它们的地方处理它们。
  • @MartijnPieters 这真的“太宽泛”了吗?如果是,那这个 java 问题不应该因为同样的原因而被关闭吗?

标签: python


【解决方案1】:

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

【讨论】:

  • 它们对我来说都是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2020-12-11
相关资源
最近更新 更多