saz*_*z01 5 python dictionary exception try-catch python-3.x
我想在字典中跟踪异常并返回相同的内容.但是当我这样做时,最后阻止给了我一个空字典.逻辑几乎适用于标量.有人可以解释一下这种行为吗.
在标量上下文中:
def test():
temp = 1
try:
raise ValueError("sdfs")
except:
temp = 2
finally:
temp = temp + 3
return temp
test()
5
Run Code Online (Sandbox Code Playgroud)
随着字典:
def test():
temp = dict()
try:
raise ValueError("something")
except Exception as error:
print("error is :{}".format(error))
temp['except'] = "something" + error
finally:
return temp
test()
error is : something
{}
Run Code Online (Sandbox Code Playgroud)
您在异常处理程序中引发了另一个异常,该异常处理程序被吞下,因为有一个从该函数返回的finally处理程序.
您不能只是连接一个异常对象和一个字符串,因此TypeError会引发一个附加对象,并且永远不会达到对该字典的赋值.
首先将异常转换为字符串:
>>> def test():
... temp = dict()
... try:
... raise ValueError("something")
... except Exception as error:
... print("error is :{}".format(error))
... temp['except'] = "something" + str(error)
... finally:
... return temp
...
>>> test()
error is :something
{'except': 'somethingsomething'}
Run Code Online (Sandbox Code Playgroud)
从try声明文件:
如果
finally存在,则指定'清理'处理程序.该try子句被执行,包括任何except和else条款.如果任何子句中发生异常但未处理,则会临时保存该异常.该finally条款已执行.如果存在已保存的异常,则在该finally子句的末尾重新引发.如果该finally子句引发另一个异常,则将保存的异常设置为新异常的上下文.如果finally子句执行return或break语句,则丢弃保存的异常 [.]
(大胆强调我的).
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |