我想遍历下面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')