Python 3.x Python3循环时缺少异常
我必须在一个类中定义一个属性,并且我希望以最类似Python的方式管理错误 这是我迄今为止尝试过的代码。我不明白为什么我不能在下面的代码中“到达”异常 示例中要使用的全局变量 my_dict={“key1”:{“property”:10},“key2”:{} 类别测试(对象): @财产 定义我的_属性(自我): 尝试: 返回自我。我的属性 除属性错误外: self.\u我的属性={} 对于键,my_dict.items()中的值: 打印(键) self._my_属性[key]=值['property'] 除例外情况外: 打印('错误') #我想在这里用日志或其他东西来管理我的错误 打印(“我没有到达这里”) 最后: 返回自我。我的属性 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': Test().my_属性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
我希望在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子句,但它“忽略”了它。