2016-06-01 48 views
1

我正在python中尝试获取值的特殊try-except-else块,如果我失败,我尝试将其创建为稍后使用。否则不会在try-except-else中引发错误

但是,创建过程并不完美(它实际上从互联网获取,并可能由于几个原因失败),我注意到,当这种失败不会引发。我得到的唯一信息是该值没有被定义

NameError: name 'value' is not defined 

由于错误可以有很多,我非常感谢来查看错误的完整引用的其他条款中

请注意:所有的尝试都可以引发KeyError,并且实例化过程不能引发这个错误,它总是其他的东西。这里是一个示例代码:

任何人有任何想法,为什么else子句不提高?有没有更好的方法来写这个?

感谢,

编辑:增加治疗的嵌套的try内在价值。 这导致我相信嵌套的尝试不起作用,因为嵌套的错误最终会在最外层之后引发。 即仅在外部尝试完成后引发内部错误。

这可能会导致一个新的问题:如何正确地在except子句中引发错误?

+1

如果你得到两个''KeyError','finally'试图使用'value'时会发生什么? – user2357112

+0

什么也没有,因为它在嵌套的'except'中被引发,所以它不会到达'finally'。 – pekapa

+1

“它没有达到'最后'” - 不,它确实如此。这就是'终于'的整点。 – user2357112

回答

0

试图访问value而不先确定它确实会引起NameError。如果KeyError因为key不在_list而被提出,那么在try块中永远不会定义value。因为您在except区块中重新定义了value,所以应该在此处确定。然而,你的finally块不访问之前重新value,所以你会在下列情况下获得NameError有:

  • value = _list[key]产生的问题比KeyError其他错误(如NameError当没有定义_list
  • clean_everything()引发任何错误
  • value = Value(number=number)引发任何错误

你可以在try块之前定义value,以便无论try块内发生了什么,都始终定义它。

相关问题