繁体   English   中英

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

[英]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值,例如FalseNone[]''

Python会按照您的期望进行操作,并返回false。

仅当字典中没有键(假设name为字典)时,才会引发异常( KeyError )。 如果你这样做

if not name['foo']:

它不抛出一个异常,那么就意味着"foo"name ,但值计算结果为布尔值false(也可以是FalseNone ,空字符串"" ,空列表[]空字典{}一些自定义对象等)。 因此,用try:except:来包装name['foo']是没有意义的-键在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM