如何在python中在一个块中编写多个try语句?
我想做:如何在python中在一个块中编写多个try语句?,python,exception,exception-handling,Python,Exception,Exception Handling,我想做: try: do() except: do2() except: do3() except: do4() 如果do()失败,则执行do2(),如果do2()也失败,则执行exceute do3(),依此类推 致意您应该指定每次尝试捕获的异常的类型 try: do() except TypeError: #for example first one - TypeError do_2() except KeyError: #for examp
try:
do()
except:
do2()
except:
do3()
except:
do4()
如果do()失败,则执行do2(),如果do2()也失败,则执行exceute do3(),依此类推
致意您应该指定每次尝试捕获的异常的类型
try:
do()
except TypeError: #for example first one - TypeError
do_2()
except KeyError: #for example second one - KeyError
do_3()
等等。如果您真的不关心异常,您可以循环案例,直到成功:
for fn in (do, do2, do3, do4):
try:
fn()
break
except:
continue
这样至少可以避免每次缩进一次。如果不同的函数需要不同的参数,您可以使用functools.partial在循环之前对其进行“prime”操作。这似乎是一件非常奇怪的事情,但我可能会循环函数,并在没有引发异常时中断:
for func in [do, do2, do3]:
try:
func()
except Exception:
pass
else:
break
我将为此编写一个快速包装函数
first()
用法:value=first([f1,f2,f3,…,fn],默认值='All failed')
这是我找到的最简单的方法,只需将try嵌入到前面的
try:
do()
except:
try:
do2()
except:
do3()
如果我不知道异常的类型?@alwbic:如果你不知道异常的类型,你就不知道如何处理异常。@alwbic我确信你必须知道你期望的异常类型。我不同意你的看法。我知道我的陈述会失败,但我不知道他们失败的顺序。但我知道如果失败了该怎么办。@alwbic:这只是一种糟糕的做法“如果某件事失败了就做点什么”,你现在不知道它失败的原因。我感觉描述你的特定用例会得到一个更优雅的解决方案……
pass
应该是continue
也许?工作原理与编写的一样,但是continue
在语义上更清晰。@Triptych True,这会更好地表示意图。编辑答案。这根本不能回答问题!创造,但这里还有什么用?这里似乎是多余的。else
只有在没有异常的情况下才会执行。如果出现异常,则将继续执行,而如果没有异常,中断将执行。:)Python中的许多语句都采用else
,目的是“如果一切顺利,那么就这样做”。请参阅try
语句的文档:我做了同样的事情,但它不能变得更紧凑吗?
try:
do()
except:
try:
do2()
except:
do3()
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise