【问题标题】:Is it possible to use comparison operators on an error? [duplicate]是否可以对错误使用比较运算符? [复制]
【发布时间】:2021-08-02 09:12:03
【问题描述】:

如果变量包含替代,我正在做类似的输出。

print("Variable contains foo" * variable.index("foo") !=None)

但是当我运行程序时,我只是得到这个错误。

ValueError: substring not found

当然,有时我希望变量不包含“foo”,那么有没有办法在不使用tryexcept 的情况下做这样的事情?

【问题讨论】:

标签: python conditional-statements valueerror


【解决方案1】:

您可以使用 Python 的 find,如果找不到子字符串,则返回 -1:

print("Variable contains foo" * (variable.find("foo") != -1))

请注意,如果“foo”不存在,则会打印一个空行。

【讨论】:

    【解决方案2】:

    如果未找到子字符串,index 方法会引发错误,而 find 方法会返回 -1。

    "My beautiful string".index("foo")     # This raises an exception
    
    "My beautiful string".find("foo")     # This returns -1
    

    然后,您可以保存结果并打印您想要的任何内容。

    【讨论】:

      【解决方案3】:

      正如@IainShelvington 已经说过的,你可以使用'foo' in variable,它永远不会引发异常,或者not in 用于相反的条件:

      Try it online!

      variable = 'a foo'
      print("Variable contains foo" * ('foo' in variable))
      variable2 = 'a bar'
      print("Variable2 has no foo" * ('foo' not in variable2))
      

      输出:

      Variable contains foo
      Variable2 has no foo
      

      【讨论】:

      • 哇我怎么没想到
      【解决方案4】:

      尽管这里给出了正确的答案,但我推荐更易于阅读和理解的变体,无需对字符串进行算术运算:

      print('' if variable.find("foo") < 0 else 'Variable contains foo')
      

      别忘了性能:

      1. A IF in ELSE B → runtime 0.075396442~0.079946904
      import timeit
      start = timeit.default_timer()
      variable = 'foo'
      for i in range(0,1000000):
        a = 'Variable contains foo' if 'foo' in variable  else ''
      stop = timeit.default_timer()
      print('Time: ', stop - start)
      
      1. IF in A*BOOL → 运行时 0.098681301~0.099800959
      import timeit
      start = timeit.default_timer()
      variable = 'foo'
      for i in range(0,1000000):
        a = "Variable contains foo" * ('foo' in variable)
      stop = timeit.default_timer()
      print('Time: ', stop - start) 
      
      1. A IF 找到 ELSE B → 运行时 0.19235808~0.195008498
      import timeit
      start = timeit.default_timer()
      variable = 'foo'
      for i in range(0,1000000):
        a = '' if variable.find("foo") < 0 else 'Variable contains foo'
      stop = timeit.default_timer()
      print('Time: ', stop - start) 
      

      【讨论】:

        猜你喜欢
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 2021-04-06
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多