是否可以对错误使用比较运算符?
Is it possible to use comparison operators on an error?
如果变量包含替代,我正在做类似的输出。
print("Variable contains foo" * variable.index("foo") !=None)
但是当我 运行 程序时,我只是得到这个错误。
ValueError: substring not found
当然,有时我希望变量不包含“foo”,所以有没有办法在不使用 try
和 except
的情况下做这样的事情?
您可以使用 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
用于相反的条件:
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')
不要忘记性能:
- 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)
- 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)
- 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)
如果变量包含替代,我正在做类似的输出。
print("Variable contains foo" * variable.index("foo") !=None)
但是当我 运行 程序时,我只是得到这个错误。
ValueError: substring not found
当然,有时我希望变量不包含“foo”,所以有没有办法在不使用 try
和 except
的情况下做这样的事情?
您可以使用 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
用于相反的条件:
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')
不要忘记性能:
- 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)
- 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)
- 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)