【问题标题】:How to check if tuple has element?如何检查元组是否有元素?
【发布时间】:2014-07-02 14:28:25
【问题描述】:

我有一个异常,我试图从中获取 args,但如果失败了。

print hasattr(e, 'args')
print type(e.args)
print hasattr(e.args, '1')
print hasattr(e.args, '0')
print '1' in e.args
print '0' in e.args
print 1 in e.args
print 0 in e.args
print e.args[0]
print e.args[1]

打印出来:

True
<type 'tuple'>
False
False
False
False
False
False
Devices not found
4

【问题讨论】:

  • 我不确定你想要什么。您想检查e.args[N] 是否存在,或者您想检查特定值是否是e.args 的一部分?
  • @netcoder 拳头,如果e.args[0] 存在
  • 只需检查e.args 的长度。如果len(e.args) == 1e.args[0] 存在,如果len(e.args) == 2e.args[1] 存在,依此类推。元组中不能有空元素,它们是零索引的。

标签: python


【解决方案1】:

您只需使用in 运算符:

>>> try:
...   raise Exception('spam', 'eggs')
... except Exception as inst:
...   print inst.args
...   print 'spam' in inst.args
... 
('spam', 'eggs')
True

如果您的代码返回False,那么1 很可能不是异常的参数。也许发布引发异常的代码。

您可以通过执行len 来检查元组是否具有0N 的位置。

【讨论】:

  • 如您所见print e.args[0] 打印结果,所以我需要检查 [0] 是否存在
  • 为什么不检查元组的len。然后你就知道存在哪些索引(最多len-1
【解决方案2】:

您可以检查元组的长度:

t = 1, 2, 3,
if len(t) >= 1:
    value = t[0]    # no error there

...或者您可以只检查IndexError,我会说它更像pythonic:

t = 1, 2, 3,
try:
    value = t[4]
except IndexError:
    # handle error case
    pass

后者是一个名为EAFP: Easier to ask for forgiveness than permission的概念,是一种众所周知且常见的Python编码风格。

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2017-11-26
    • 2010-12-30
    相关资源
    最近更新 更多