gpt4 book ai didi

python - Python中的自定义异常似乎不遵循 “its easier to ask for forgiveness”吗?

转载 作者:行者123 更新时间:2023-12-03 07:40:11 35 4
gpt4 key购买 nike

我正在尝试改进编码,最近遇到了自定义异常(exception)和“比许可更容易请求宽恕”(EAFP)的概念,但在我看来,自定义异常(exception)仍然遵循该概念。

例如,在下面的代码中,A看起来很干净,但是没有自定义异常。 B看起来也很整洁,但没有自定义异常(exception),并且不遵循EAFP概念。 B的替代方法是用自定义错误替换KeyError。 C有一个自定义的异常(exception),但似乎很冗长,对我来说,它似乎更接近LBYL。

示例C通常是如何使用自定义异常的吗? (使用try/except AND if/else)

对于许多人会使用的生产级代码,示例C中的额外代码行是否值得?

animal_dict={'cat':'mammal', 
'dog':'mammal',
'lizard':'reptile'}

# A - easier to ask for forgiveness not permission (EAFP)
try:
animal_type = animal_dict['hamster']
except KeyError:
print('Your animal cannot be found')


#B - look before you leap (LBYL)
if 'hamster' in animal_dict:
animal_type = animal_dict['hamster']
else:
raise KeyError('Your animal cannot be found')


# C - with custom exception
class AnimalNotFoundError(KeyError):
pass

try:
if 'hamster' in animal_dict:
animal_type = animal_dict['hamster']
else:
raise AnimalNotFoundError('Invalid animal: {}'.format('hamster'))
except AnimalNotFoundError as e:
print(e)

最佳答案

在这种情况下,应该使用自定义异常将详细信息添加到通用KeyError异常中。您可以在异常处理块中使用from关键字将您的异常与基本片段相关联,如下所示:

class AnimalNotFoundError(KeyError):
pass

try:
# Don't look, just take
animal_type = animal_dict['hamster']
except KeyError as ex:
# Add some detail for the error here, and don't silently consume the error
raise AnimalNotFoundError('Invalid animal: {}'.format('hamster')) from ex

关于python - Python中的自定义异常似乎不遵循 “its easier to ask for forgiveness”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61309359/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com