python:理解中的异常:我可以获取循环变量的检索值吗?

时间:2011-05-18 23:40:25

标签: python exception python-3.x list-comprehension

假设我正在解析固定宽度的文件:

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理解的情况下检索kv值?

2 个答案:

答案 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子句中访问。

但是,我几乎可以肯定,这是一种无证的行为。