Python:变量 "tricking"try-exception,但适用于 if 语句

标签 python parsing exception 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 的返回,您会得到一个异常(exception)。尝试这样做:

    name = {}
    name['foo'] 
    

    然后你会得到一个 KeyError 异常

  • 永远不要有 except: block !始终捕获您要处理的特定异常,例如 IndexError 或其他

关于Python:变量 "tricking"try-exception,但适用于 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943179/

相关文章:

java - 从 Kotlin 调用 Java 编写的抛出异常的方法时,如何实现空安全?

Python - 低效的空间距离计算(如何加速)

python - python 中的客户端服务器编程?

python - 如何使用 buildout 创建简单的 python 项目?

python - OpenCV 检测试管中的药丸数量

javascript - 如何使用 jQuery 检索 URL 查询字符串中包含的多个十六进制值?

c - 如何在C代码中解析带空格的文件夹路径

java - 创建文件,java中的异常情况

python - 如何解析epub中每一章的文本?

java - Java 中异常对性能的影响是什么?