我已經完成了這一步,並與pdb跟蹤檢查每個值,但無法弄清楚爲什麼我得到一個KeyError,一切都有其預期的價值。這是函數:爲什麼當它有一個值時拋出一個KeyError?
def get_formatted_timestamp(date_field, time_field):
# expects date_field = yyyy-M-d
# expects time_field = H:m:s
# outputs yyyy-MM-ddTHH:mm:ss:SSSZ ('T' and 'Z' are literals)
dt = date_field.strip().split('/')
tm = time_field.strip().split(':')
if len(dt) != 3 or len(tm) != 3 or len(dt[0]) != 4:
print 'invalid date or time: {} {}'.format(date_field, time_field)
return '1900-01-01T00:00:00.000Z' # error date value
y = dt[0]
M = dt[1] if len(dt[1]) == 2 else '0'+dt[1]
d = dt[2] if len(dt[2]) == 2 else '0'+dt[2]
H = tm[0] if len(tm[0]) == 2 else '0'+tm[0]
m = tm[1] if len(tm[1]) == 2 else '0'+tm[1]
s = tm[2] if len(tm[2]) == 2 else '0'+tm[2]
return '{y}-{M}-{d}T{H}:{m}:{s}.000Z'.format(y, M, d, H, m, s) # KeyError
的錯誤是:
KeyError: 'y'
然而,y
有一個適當的年份字符串值(我查repr(y)
;不出所料字符串)。我還檢查了dt[0]
是有效的,它顯示了適當的年份價值。
爲什麼當所有事物都有預期值時拋出KeyError?我很難過。
這裏是PDB輸出,其中我手動檢查每一個值:
(Pdb) print repr(dt[0])
'2014'
(Pdb) print repr(y)
'2014'
(Pdb) print repr(M)
'02'
(Pdb) print repr(d)
'10'
(Pdb) print repr(H)
'15'
(Pdb) print repr(m)
'35'
(Pdb) print repr(s)
'19'
請注意,您可以只鍵入'DT [0]'在調試器提示符和PDB將已經使用'print repr(..)'作爲該值。對於'd'和's',分別使用'!d'和'!s',以避免這些被視爲調試器命令。出於這個原因,我總是在變量introspections前添加'!'。 –
@MartijnPieters我不知道 - 謝謝! –