是否可以对错误使用比较运算符?

Is it possible to use comparison operators on an error?

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

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

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

ValueError: substring not found

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

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

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

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

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

"My beautiful string".index("foo")     # This raises an exception

"My beautiful string".find("foo")     # This returns -1

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

正如@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

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

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 → runtime 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)