为什么里面的返回最后会给出空字典?

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)

Mar*_*ers 6

您在异常处理程序中引发了另一个异常,该异常处理程序被吞下,因为有一个从该函数返回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子句被执行,包括任何exceptelse条款.如果任何子句中发生异常但未处理,则会临时保存该异常.该finally条款已执行.如果存在已保存的异常,则在该finally子句的末尾重新引发.如果该finally子句引发另一个异常,则将保存的异常设置为新异常的上下文.如果finally子句执行returnbreak语句,则丢弃保存的异常 [.]

(大胆强调我的).