Python:变量“触发” try-exception,但适用于if语句

我知道标题似乎很疯狂,但这是事实。这是我的困境。首先,我仍然是Python的初学者,所以请体谅。我正在尝试测试变量是否存在。现在,变量来自以yaml解析的文件。每当我尝试此代码时,


if not name['foo']:

    print "No name given."

    return False

Python会按照您的期望进行操作,并返回false。但是,当我尝试将其更改为此代码时,


try:

    name['foo']

except:

    print "ERROR: No name given."

    raise

从未发生过例外。我已经搜索了很多东西,但是找不到任何可以向我解释的问题或网站。我唯一的想法是解析器正在“触发”异常处理程序,但这对我来说真的没有意义。


我确保要解析的文档的名称字段中没有空格。该字段的格式为:


*name: foo

*ver: bar

就像我说过的那样,我确保foo以及行之间的所有空格都被完全删除。如果有人可以提供帮助,将不胜感激。


临摹微笑
浏览 272回答 3
3回答

撒科打诨

一些东西:那不应该抛出异常!您name['foo']在两个地方都在做,并且期望有不同的行为。它们的name行为不像字典,如果不这样做,False在第一个示例中您将不会得到回报,那么您将获得异常。尝试这样做:        name = {}        name['foo'] 然后你会得到一个KeyError例外永远不会有except:障碍!总是赶特定异常你后,喜欢IndexError或什么

叮当猫咪

我不明白您为什么认为这会引发例外。密钥显然存在,否则第一个代码段将无法工作。该键的值显然有些假Y值一样False,None,[]或''。

一只斗牛犬

Python会按照您的期望进行操作,并返回false。KeyError仅当字典中没有键(假设name是字典)时,才会引发异常()。如果你这样做if not name['foo']:它不抛出一个异常,那么就意味着"foo"在name但该值计算结果为布尔值false(也可以是False,None空字符串"",空单[],空字典{},一些自定义的对象,等等,等等)。因此,包装name['foo']用try:except:是没有意义的-关键是存在的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python