【发布时间】:2021-02-18 10:24:29
【问题描述】:
我有一个 Python 应用程序,我有一个记录器。
在执行的不同步骤中,应用程序必须读取各种输入文件。输入文件可以有不同的信息,但都是通过同一个函数读取的。
我正在查看的特定信息之一是名为 computation_id 的信息,并且必须存在于其中一个文件中,但可以不存在于所有其他文件中。
我很想知道处理这种情况的正确方法是什么。目前我正在这样处理它:
def input_reading(filename):
results = {}
[...]
try:
results['computation_id'] = read_computation_id()
except KeyError:
pass
[...]
return results
因此,如果正在读取的文件中没有computation_id,代码将继续运行。但是,在某些时候,我需要这个计算 ID,因此我需要检查它是否从我希望找到它的文件中正确读取。
我实际上需要这个值在代码的后面。但是运行代码到此为止(这需要一些时间)然后失败是浪费计算时间。所以我的想法是尽快检查这个值并通过以下方式处理错误:
def specifc_file_read(filename):
[...]
results = input_reading('my_file')
try:
results['computation_id']
except KeyError:
logger.exception('no computation id provided, aborting')
raise SystemExit('no computation id provided, aborting')
[...]
这是好的做法吗?
我有一种感觉,因为我需要编写特殊的代码行来“尽快”检查代码中的错误,以避免浪费计算时间。
由于我在错误处理方面没有太多经验,因此我想知道这是否是一种好习惯,以免养成不良习惯。
【问题讨论】:
-
您是否同时读取所有文件?还是按需处理?
-
我按需处理它们
-
我会说有一个带有文件 ID 和布尔值(例如
has_computation_id)的表是有意义的。或者某种缓存。 -
我会检查密钥在使用它的函数中是否可用,如果没有,则抛出异常。
-
代码的架构方式,我不能那样做。事实上,有些文件没有那个密钥,这应该不是问题。
标签: python logging error-handling