我知道标题看起来很疯狂,但确实如此。这是我的困境。首先,我仍然是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被完全删除以及行之间的任何空格。如果有人可以提供帮助,我们将不胜感激。
编辑:
我为if语句中的否定逻辑道歉。该功能必须经过一系列检查。我能想到确保执行所有检查的最好方法是在最后返回true,如果任何单独的检查失败则返回false。
答案 0 :(得分:1)
一些事情:
不应该抛出异常!你在两个地方做name['foo']
并期待不同的行为。
name
的行为与字典不同,如果它在第一个示例中没有得到False
的返回,则会出现异常。试着这样做:
name = {}
name['foo']
然后您将获得KeyError
例外
不要有except:
块!始终抓住您所追求的特定例外情况,例如IndexError
或其他
答案 1 :(得分:0)
我不明白为什么你认为它会引发异常。关键显然存在,否则第一个片段将无法正常工作。该键的值显然是一些假y值,如False
,None
,[]
或''
。
答案 2 :(得分:0)
Python按预期执行并返回false。
只有在字典中没有键时才会抛出异常(KeyError
)(假设name
是字典)。如果你这样做
if not name['foo']:
并且它不会抛出异常,那么它意味着"foo"
在name
中,但值的计算结果为布尔值假(可以是False
,None
,空字符串""
,空列表[]
,空字典{}
,某些自定义对象等等。因此用name['foo']
包裹try:except:
毫无意义 - 关键在那里。