假设我正在解析固定宽度的文件:
file_format = {'year' : (0, 3, int), 'price' : (4, 10, float)}
for lineno, line in enumerate(input_file):
try:
fields = {k : v[2](line[v[0]:v[1]]) for k, v in file_format.items()}
except ValueError:
print("cannot parse line {}".format(lineno))
我想在打印输出中添加有关无法解析哪个特定字段的信息。有没有办法在不用循环替换dict理解的情况下检索k
和v
值?
答案 0 :(得分:4)
您可以将有问题的部分转换为函数
file_format = {'year' : (0, 3, int), 'price' : (4, 10, float)}
def build_value(v):
try:
return v[2](line[v[0]:v[1]])
except ValueError:
print("cannot parse line {}".format(lineno))
for lineno, line in enumerate(input_file):
fields = {k : build_value(v) for k, v in file_format.items()}
答案 1 :(得分:0)
我不知道Python 3和dict comprehensions,但检查为列表推导生成的字节码表明循环变量只是局部变量,可以在catch子句中访问。
但是,我几乎可以肯定,这是一种无证的行为。