gpt4 book ai didi

python - Python try-except block 的 DRY 方法?

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:06 25 4
gpt4 key购买 nike

目标: 我有几行代码,每行代码都可能产生相同类型的错误,并保证相同类型的响应。如何防止 try-except block 出现“不要重复自己”的问题。

背景:

我使用 ReGex 从文本文件中抓取格式不正确的数据,并将其输入到自定义对象的字段中。该代码工作得很好,除非该字段留空,在这种情况下它会抛出错误。

我在 try-except block 中处理这个错误。如果错误,则在对象的字段中插入一个空格(即“”)。

问题是它将易于阅读、漂亮的 Python 代码变成了一堆 try-except block ,每个 block 都做完全相同的事情。这是“不要重复自己”(又名 DRY)的违规行为。

代码:

之前:

sample.thickness = find_field('Thickness', sample_datum)[0]
sample.max_tension = find_field('Maximum Load', sample_datum)[0]
sample.max_length = find_field('Maximum Extension', sample_datum)[0]
sample.test_type = sample_test

之后:

try:
sample.thickness = find_field('Thickness', sample_datum)[0]
except:
sample.thickness = ''

try:
sample.max_tension = find_field('Maximum Load', sample_datum)[0]
except:
sample.max_tension = ''

try:
sample.max_length = find_field('Maximum Extension', sample_datum)[0]
except:
sample.max_length = ''

try:
sample.test_type = sample_test
except:
sample.test_type = ''

我需要什么:

是否有一些 Pythonic 的方式来写这个?在某些 block 中,如果这些行中的任何一行出现索引超出范围错误(表示该字段为空白,并且 ReGex 未能返回任何内容),我可以在示例字段中插入一个空白。

最佳答案

从中提取一个函数怎么样?

def maybe_find_field(name, datum):
try:
return find_field(name, datum)[0]
except IndexError: # Example of specific exception to catch
return ''

sample.thickness = maybe_find_field('Thickness', sample_datum)
sample.max_tension = maybe_find_field('Maximum Load', sample_datum)
sample.max_length = maybe_find_field('Maximum Extension', sample_datum)
sample.test_type = sample_test

顺便说一句,不要简单地使用 except: 捕获所有可能的异常,除非这确实是您想要做的。捕获所有内容可能会隐藏实现错误,并且以后很难调试。只要有可能,将您的 except 案例绑定(bind)到您需要的特定异常。

关于python - Python try-except block 的 DRY 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38488476/

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