我正在寻找一种更好的方法来实现这种逻辑:
if not a():
if not b():
c()
b()
a()
另一种形式:
try:
a()
except:
try:
b()
a()
except:
c()
b()
a()
换句话来说,“尝试运行 A。如果我们不能执行 A,我们需要先执行 B。如果我们不能执行 B,我们需要先执行 C,等等。”
最佳答案
不确定您是否对此感觉“更好”;这是一个替代方案。我相信有些人喜欢,有些人不喜欢。
a() or (b(),a())[0] or (c(),b(),a())[0]
这是验证测试:
def a(ret):
print 'run a, a succeeded?', ret
return ret
def b(ret):
print 'run b, b succeeded?', ret
return ret
def c(ret):
print 'run c, c succeeded?', ret
return ret
还有
a(False) or (b(False),a(False))[0] or (c(True),b(False),a(False))[0]
给出
run a, a succeeded? False
run b, b succeeded? False
run a, a succeeded? False
run c, c succeeded? True
run b, b succeeded? False
run a, a succeeded? False
还有
a(False) or (b(True),a(False))[0] or (c(True),b(True),a(False))[0]
给出
run a, a succeeded? False
run b, b succeeded? True
run a, a succeeded? False
关于Pythonic 方式到 "run X before Y if Y fails"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800804/