为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2021-03-25 14:10:18
我知道标题似乎很疯狂,但这是事实。这是我的困境。首先,我仍然是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或什么


查看完整回答
反对 回复 2021-03-30
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我不明白您为什么认为这会引发例外。密钥显然存在,否则第一个代码段将无法工作。该键的值显然有些假Y值一样FalseNone[]''


查看完整回答
反对 回复 2021-03-30
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

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

if not name['foo']:

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


查看完整回答
反对 回复 2021-03-30
  • 3 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号