Python 3.x Python3循环时缺少异常

Python 3.x Python3循环时缺少异常,python-3.x,exception,error-handling,Python 3.x,Exception,Error Handling,我必须在一个类中定义一个属性,并且我希望以最类似Python的方式管理错误 这是我迄今为止尝试过的代码。我不明白为什么我不能在下面的代码中“到达”异常 示例中要使用的全局变量 my_dict={“key1”:{“property”:10},“key2”:{} 类别测试(对象): @财产 定义我的_属性(自我): 尝试: 返回自我。我的属性 除属性错误外: self.\u我的属性={} 对于键,my_dict.items()中的值: 打印(键) self._my_属性[key]=值['proper

我必须在一个类中定义一个属性,并且我希望以最类似Python的方式管理错误

这是我迄今为止尝试过的代码。我不明白为什么我不能在下面的代码中“到达”异常

示例中要使用的全局变量 my_dict={“key1”:{“property”:10},“key2”:{} 类别测试(对象): @财产 定义我的_属性(自我): 尝试: 返回自我。我的属性 除属性错误外: self.\u我的属性={} 对于键,my_dict.items()中的值: 打印(键) self._my_属性[key]=值['property'] 除例外情况外: 打印('错误') #我想在这里用日志或其他东西来管理我的错误 打印(“我没有到达这里”) 最后: 返回自我。我的属性 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': Test().my_属性
我希望在for循环的第二次迭代中遇到异常情况,因为它是一个keyrerror(“key2”没有“属性”)。但它只是路过。在本例中,如果脚本已运行,则不会打印“我未到达此处”。谁能解释一下我为什么看错了?谢谢

self.\u my\u attribute[key]=value['property']中的潜在
KeyError
不在
中,异常除外。一旦引发了
finally
块,就会执行它(事实上,
finally
块总是被执行,不管引发了什么异常,甚至处理了什么异常)。这可以通过使用分步调试程序或在
finally
块内使用简单的
print('finally')
轻松验证

这就是为什么
try
块应该尽可能少的原因。如果您知道该行可能会引发
键错误
,则显式地
尝试除此之外
它:

for key, value in my_dict.items():
    print(key)
    try:
        self._my_attribute[key] = value['property']
    except KeyError as e:
        print('Key ', e, 'does not exist')

self.\u my\u attribute[key]=value['property']
中潜在的
keyrerror
不在
块中,异常除外。一旦引发了
finally
块,就会执行它(事实上,
finally
块总是被执行,不管引发了什么异常,甚至处理了什么异常)。这可以通过使用分步调试程序或在
finally
块内使用简单的
print('finally')
轻松验证

这就是为什么
try
块应该尽可能少的原因。如果您知道该行可能会引发
键错误
,则显式地
尝试除此之外
它:

for key, value in my_dict.items():
    print(key)
    try:
        self._my_attribute[key] = value['property']
    except KeyError as e:
        print('Key ', e, 'does not exist')

提供一个“但它没有”然后它做了什么?希望这个变化是一个可复制的例子。我还编辑了这个问题。回答第二条评论:我假设它将进入例外条款,但它“忽略”了它。提供一个“但它没有”,然后它做了什么?希望这个更改是一个可复制的例子。我还编辑了这个问题。回答第二条评论:我假设它将进入Exception子句,但它“忽略”了它。