尝试除了块功能
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)
当 运行 以下代码时,我得到 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)