- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试改进编码,最近遇到了自定义异常(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/
在一个 React JSX View 中,我有一个表达式 {a.b.c} 使整个 View 崩溃,因为有时 b 是 undefined。是否有模块提供 the same behaviour than
我不是在询问关于这种哲学的个人“宗教”意见,而是更多技术性的意见。 我知道这句话是测试您的代码是否“pythonic”的几个试金石之一。但对我来说,pythonic 意味着干净、简单和直观,没有加载用
我正在尝试改进编码,最近遇到了自定义异常(exception)和“比许可更容易请求宽恕”(EAFP)的概念,但在我看来,自定义异常(exception)仍然遵循该概念。 例如,在下面的代码中,A看起来
我的任务是使用 Google Maps API 创建一个工具,餐厅可以使用该工具来定义送货区域。这是进度:http://codepen.io/keithpickering/pen/NqdzKO 用户应
为什么“请求宽恕比获得许可更容易”(EAFP)被认为是 Python 中的良好实践?作为一名编程新手,我的印象是与使用其他检查相比,使用许多 try...except 例程会导致代码臃肿且可读性差。
我是一名优秀的程序员,十分优秀!