尝试除了块功能

try except block in function

当 运行 以下代码时,我得到 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 块在函数中不起作用。

函数参数是在将值传递给函数之前计算的表达式

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