2011-05-18 24 views
3

假設我解析一個固定寬度的文件:python:理解中的異常:我可以檢索循環變量的值嗎?

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)) 

我想添加到異常打印哪些特定領域無法解析的信息。有沒有什麼辦法可以檢索kv的值,而無需用循環替換dict理解?

回答

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()} 
0

我不知道關於Python 3,和字典內涵明確,但檢查列表解析生成字節碼顯示,循環變量只是局部的變量,並且可以在catch子句中訪問。

雖然這是我幾乎可以肯定的無證行爲。

+0

在轉換到python 3時發生了改變。局部變量不再可用。 – 2011-05-19 00:29:17

+0

爲什麼改變了?爲什麼它沒有證據記錄的行爲?看起來相當有用並且易於實現。 – max 2011-05-19 02:24:32

相關問題