[英]Python: variable “tricking” try-exception, but works for if statement
我知道标题似乎很疯狂,但这是事实。 这是我的困境。 首先,我仍然是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。
一些东西:
那不应该抛出异常! 您正在两个地方执行name['foo']
,并且期望有不同的行为。
该name
行为不像字典,如果不这样做,在第一个示例中您将不会得到False
的返回,那么您将得到一个异常。 尝试这样做:
name = {} name['foo']
然后,您将得到一个KeyError
异常
永远不要有except:
封锁! 始终捕获特定的异常,例如IndexError
或其他任何异常
我不明白您为什么认为这会引发例外。 密钥显然存在,否则第一个代码段将不起作用。 该键的值显然是一些False-y值,例如False
, None
, []
或''
。
Python会按照您的期望进行操作,并返回false。
仅当字典中没有键(假设name
为字典)时,才会引发异常( KeyError
)。 如果你这样做
if not name['foo']:
它不抛出一个异常,那么就意味着"foo"
是name
,但值计算结果为布尔值false(也可以是False
, None
,空字符串""
,空列表[]
空字典{}
一些自定义对象等)。 因此,用try:except:
来包装name['foo']
是没有意义的-键在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.