Pythontryexceptelse详解
在原本的tryexcept结构的基础上,Python异常处理机制还提供了一个else块,也就是原有tryexcept语句的基础上再添加一个else块,即tryexceptelse结构。
使用else包裹的代码,只有当try块没有捕获到任何异常时,才会得到执行;反之,如果try块捕获到异常,即便调用对应的except处理完异常,else块中的代码也不会得到执行。
举个例子:
try: result = 20 / int(input('请输入除数:')) print(result)except ValueError: print('必须输入整数')except ArithmeticError: print('算术错误,除数不能为 0')else: print('没有出现异常') print("继续执行")12345678910复制代码类型:[python]
可以看到,在原有tryexcept的基础上,我们为其添加了else块。现在执行该程序:
请输入除数:45.0没有出现异常 继续执行1234复制代码类型:[python]
如上所示,当我们输入正确的数据时,try块中的程序正常执行,Python解释器执行完try块中的程序之后,会继续执行else块中的程序,继而执行后续的程序。
读者可能会问,既然Python解释器按照顺序执行代码,那么else块有什么存在的必要呢?直接将else块中的代码编写在tryexcept块的后面,不是一样吗?
当然不一样,现在再次执行上面的代码:
请输入除数:a 必须输入整数 继续执行123复制代码类型:[python]
可以看到,当我们试图进行非法输入时,程序会发生异常并被try捕获,Python解释器会调用相应的except块处理该异常。但是异常处理完毕之后,Python解释器并没有接着执行else块中的代码,而是跳过else,去执行后续的代码。
也就是说,else的功能,只有当try块捕获到异常时才能显现出来。在这种情况下,else块中的代码不会得到执行的机会。而如果我们直接把else块去掉,将其中的代码编写到tryexcept的后面:
try: result = 20 / int(input('请输入除数:')) print(result)except ValueError: print('必须输入整数')except ArithmeticError: print('算术错误,除数不能为 0') print('没有出现异常') print("继续执行")123456789复制代码类型:[python]
程序执行结果为:
请输入除数:a 必须输入整数 没有出现异常 继续执行1234复制代码类型:[python]
可以看到,如果不使用else块,try块捕获到异常并通过except成功处理,后续所有程序都会依次被执行。
赞 (0)