我在try块中的代码有问题。为了简单起见,这是我的代码:
try:
code a
code b #if b fails, it should ignore, and go to c.
code c #if c fails, go to d
code d
except:
pass
这样的事情可能吗?
我在try块中的代码有问题。为了简单起见,这是我的代码:
try:
code a
code b #if b fails, it should ignore, and go to c.
code c #if c fails, go to d
code d
except:
pass
这样的事情可能吗?
try
块可以抑制所有已执行代码的异常。它可以让您在发生异常时捕获异常,但是该块的其余部分永远不会执行。
Answers:
您必须制作以下单独的 try
块:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
try:
code c
except ExplicitException:
try:
code d
except ExplicitException:
pass
这是假设你想运行code c
仅如果code b
失败。
如果您code c
无论如何都要运行,则需要try
一个接一个地放置这些块:
try:
code a
except ExplicitException:
pass
try:
code b
except ExplicitException:
pass
try:
code c
except ExplicitException:
pass
try:
code d
except ExplicitException:
pass
我在except ExplicitException
这里使用是因为盲目地忽略所有异常永远不是一个好习惯。你会被忽略MemoryError
,KeyboardInterrupt
并且SystemExit
还有否则,你通常不希望忽略或没有某种形式再次加注或意识理性处理这些拦截。
提取(重构)您的陈述。和使用魔法and
和or
何时决定短路。
def a():
try: # a code
except: pass # or raise
else: return True
def b():
try: # b code
except: pass # or raise
else: return True
def c():
try: # c code
except: pass # or raise
else: return True
def d():
try: # d code
except: pass # or raise
else: return True
def main():
try:
a() and b() or c() or d()
except:
pass
b
失败(引发异常),c
将不会执行,也不会执行d
。
pass
.....对其进行编辑,更好吗?
except: pass ... else: return True
是一种含蓄的含蓄说法except: return None ... else: return True
。最好明确一点。
如果您不想链接(大量)try-except子句,则可以循环尝试代码,并在第一次成功时中断。
可以放入函数中的代码示例:
for code in (
lambda: a / b,
lambda: a / (b + 1),
lambda: a / (b + 2),
):
try: print(code())
except Exception as ev: continue
break
else:
print("it failed: %s" % ev)
直接在当前作用域中使用任意代码(语句)的示例:
for i in 2, 1, 0:
try:
if i == 2: print(a / b)
elif i == 1: print(a / (b + 1))
elif i == 0: print(a / (b + 2))
break
except Exception as ev:
if i:
continue
print("it failed: %s" % ev)
假设每个代码都是一个函数,并且已经编写了代码,然后可以使用以下代码遍历您的编码列表,并在使用“ break”执行函数而没有错误时退出for循环。
def a(): code a
def b(): code b
def c(): code c
def d(): code d
for func in [a, b, c, d]: # change list order to change execution order.
try:
func()
break
except Exception as err:
print (err)
continue
我在这里使用了“ Exception”,因此您可以看到打印的任何错误。如果您知道期望什么并且不在乎,请关闭打印(例如,如果代码返回两个或三个列表项(i,j = msg.split('。'))。
try
code c
被执行,只有当代码B将引发异常?