Python try except else使用详解
在原本的tryexcept结构的基础上,Python异常处理机制还提供了一个else块,也就是原有tryexcept语句的基础上再添加一个else块,即tryexceptelse结构。
使用else包裹的代码,只有当try块没有捕获到任何异常时,才会得到执行;反之,如果try块捕获到异常,即便调用对应的except处理完异常,else块中的代码也不会得到执行。
举个例子:
try: result=20/int(input('请输入除数:')) print(result) exceptValueError: print('必须输入整数') exceptArithmeticError: print('算术错误,除数不能为0') else: print('没有出现异常') print("继续执行")
可以看到,在原有tryexcept的基础上,我们为其添加了else块。现在执行该程序:
请输入除数:4
5.0
没有出现异常
继续执行
如上所示,当我们输入正确的数据时,try块中的程序正常执行,Python解释器执行完try块中的程序之后,会继续执行else块中的程序,继而执行后续的程序。
读者可能会问,既然Python解释器按照顺序执行代码,那么else块有什么存在的必要呢?直接将else块中的代码编写在tryexcept块的后面,不是一样吗?
当然不一样,现在再次执行上面的代码:
请输入除数:a
必须输入整数
继续执行
可以看到,当我们试图进行非法输入时,程序会发生异常并被try捕获,Python解释器会调用相应的except块处理该异常。但是异常处理完毕之后,Python解释器并没有接着执行else块中的代码,而是跳过else,去执行后续的代码。
也就是说,else的功能,只有当try块捕获到异常时才能显现出来。在这种情况下,else块中的代码不会得到执行的机会。而如果我们直接把else块去掉,将其中的代码编写到tryexcept的后面:
try: result=20/int(input('请输入除数:')) print(result) exceptValueError: print('必须输入整数') exceptArithmeticError: print('算术错误,除数不能为0') print('没有出现异常') print("继续执行")
程序执行结果为:
请输入除数:a
必须输入整数
没有出现异常
继续执行
可以看到,如果不使用else块,try块捕获到异常并通过except成功处理,后续所有程序都会依次被执行。
python tryexceptelsefinally实例
classAError(Exception): """AError---exception""" print('AError') classBError(Exception): """BError---exception""" print('BError') try: #raiseAError #raiseBError aaaaa() exceptAError: print("GetAError") exceptBError: print("GetBError") except: print("GetException") else: print("doelse") finally: print("finally")
1.在上面所示的完整语句中try/except/else/finally所出现的顺序必须是try-->exceptX-->except-->else-->finally,即所有的except必须在else和finally之前,else(如果有的话)必须在finally之前,而exceptX必须在except之前。否则会出现语法错误。
2.在上面的完整语句中,else语句的存在必须以exceptX或者except语句为前提,如果在没有except语句的tryblock中使用else语句会引发语法错误。也就是说else不能与try/finally配合使用。
3.try成功进else,不成功进对应的except;
4.不论是否成功exceptX,except的判定语句都会执行,只是不进入;对应到以上程序就是不论哪种情况AErrorBError都会打印,但是GetAErrorGetBError只有抛对应的异常时才会打印。
5.finally所有情况都会执行,可以不写,写了就必须在所有exceptelse等之后;
到此这篇关于Pythontryexceptelse使用详解的文章就介绍到这了,更多相关Pythontryexceptelse内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!