我知道标题似乎很疯狂,但这是事实。这是我的困境。首先,我仍然是Python的初学者,所以请体谅。我正在尝试测试变量是否存在。现在,变量来自以yaml解析的文件。每当我尝试此代码时,if not name['foo']: print "No name given." return FalsePython会按照您的期望进行操作,并返回false。但是,当我尝试将其更改为此代码时,try: name['foo']except: print "ERROR: No name given." raise从未发生过例外。我已经搜索了很多东西,但是找不到任何可以向我解释的问题或网站。我唯一的想法是解析器正在“触发”异常处理程序,但这对我来说真的没有意义。我确保要解析的文档的名称字段中没有空格。该字段的格式为:*name: foo*ver: bar就像我说过的那样,我确保foo以及行之间的所有空格都被完全删除。如果有人可以提供帮助,将不胜感激。
3 回答

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

一只斗牛犬
TA贡献1784条经验 获得超2个赞
Python会按照您的期望进行操作,并返回false。
KeyError
仅当字典中没有键(假设name
是字典)时,才会引发异常()。如果你这样做
if not name['foo']:
它不抛出一个异常,那么就意味着"foo"
在name
但该值计算结果为布尔值false(也可以是False
,None
空字符串""
,空单[]
,空字典{}
,一些自定义的对象,等等,等等)。因此,包装name['foo']
用try:except:
是没有意义的-关键是存在的。
添加回答
举报
0/150
提交
取消