如何报告和修复错误,而迭代?



我想遍历下面raw_data中的元素,

  • 存储f(x)的值
  • 当f(x)给出错误时,显示错误消息并存储此消息
  • 修复了由于类型导致的错误,即"四";而不是4

有可能同时做这三件事吗?

import math
import sys
raw_data = [5,"four", -3,2,1]
def f(x):
return math.log(x)

我现在看到的是:

import math
import sys
raw_data = [5,"four", -3,2,1]
def f(x):
return math.log(x)
for x in raw_data:
try:
print(f(x))
except:
print("error:",sys.exc_info()[0])

这给了我一个结果列表:

1.6094379124341003
error: <class 'TypeError'>
error: <class 'ValueError'>
0.6931471805599453
0.0

我怎么能

a)存储没有错误的f(x)的值

b)当出现错误时,报告并存储错误信息

c)纠正输入错误?

提前谢谢你

假设您希望将函数结果和错误消息存储在两个不同的列表中,我建议创建两个列表并在try/except中添加其中一个列表。使用字典在特定字符串和它们的等效数值之间进行转换。

results = []
errors = []
num_names = {
'four': 4,
}
for x in raw_data:
x = num_names.get(x, x)
try:
results.append(f(x))
except Exception as e:
errors.append(repr(e))
print("Results:", *results, sep='n')
print("Errors:", *errors, sep='n')
Results:
1.6094379124341003
1.3862943611198906
0.6931471805599453
0.0
Errors:
ValueError('math domain error')

最新更新