尝试除了功能块

时间:2016-08-25 17:15:29

标签: python function try-except

运行以下代码时我得到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块无法正常工作。

1 个答案:

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