【发布时间】:2019-01-19 09:07:34
【问题描述】:
我正在尝试找出处理异常的最 Pythonic 方式。假设我们有一个很长的方法来完成与注册汽车有关的多项任务
例如
- 检索汽车详细信息
- 计算税金
- 发送确认电子邮件
调用方法是否应该处理异常:
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