运行以下代码时我得到KeyError
:
r={'foo':'bar'} #no timestamp
def function(f=None):
try:
print(f) # giving r['timestamp'] KeyError
except:
print("problem")
function(f=r['timestamp'])
但这很有效,它会打印problem
:
try:
print(r['timestamp']) # giving r['timestamp'] KeyError
except:
print("problem")
我无法理解为什么try-except块无法正常工作。
答案 0 :(得分:1)
函数参数是在将值传递给函数
之前计算的表达式所以r['timestamp']
在function(f=...)
之前执行,所以在任何try块捕获任何异常之前
您可以使用dict.get来避免KeyError
:
function(f=r.get('timestamp', None))
或者如果你真的需要在函数中捕获KeyError:
def function(f=None):
f = f or {}
try:
print(f['timestamp'])
except KeyError:
print("problem")
function(f=r)