抛出是用来移交控制权的机制,抛出异常也可以称作引发异常。抛出异常后,控制权会查找对应的捕获机制并做进一步处理。错误(Error)则常用来表示系统级错误或底层资源错误。在 Python 中,二者具有相同的处理机制。编程过程中,通常很难将所有的异常状况都处理得很好,通过异常捕获可以针对突发事件做集中处理,从而保证程序的稳定性和健壮性。
在 Python 中使用 try…except…else…finally… 语句检查可能发生异常的代码、捕获异常并做进一步处理,其语法如下:
try:
#尝试执行的代码
[except 错误类型1 :
#针对错误类型1,对应的代码处理]
[except 错误类型2 :
#针对错误类型2,对应的代码处理]
[except (错误类型3,错误类型4):
#针对错误类型3和4,对应的代码处理]
[except Exception as result:
#打印错误信息]
[else:
#没有异常才会执行的代码]
[finally:
#无论是否有异常,都会执行的代码]
例如以下代码尝试执行除法操作:
try: num = int(input("请输入一个整数: ")) result = 5 / num print(result) except ValueError: print("请输入正确的整数") except ZeroDivisionError: print("除 0 错误") except Exception as result: print("未知错误 %s" % result) else : print("正常执行") finally: print("执行完成")
当用户输入 0 时,上述代码的运行结果如下所示:
>>> try:
… num = int(input("请输入一个整数: "))
… result = 5 / num
… print(result)
… except ValueError:
… print("请输入正确的整数")
… except ZeroDivisionError:
… print("除 0 错误")
… except Exception as result:
… print("未知错误 %s" % result)
… else :
… print("正常执行")
… finally:
… print("执行完成")
请输入一个整数: 0
除 0 错误
执行完成
当用户输入字母 a 时,上述代码的运行结果如下所示:
>>> try:
… num = int(input("请输入一个整数: "))
… result = 5 / num
… print(result)
… except ValueError:
… print("请输入正确的整数")
… except ZeroDivisionError:
… print("除 0 错误")
… except Exception as result:
… print("未知错误 %s" % result)
… else :
… print("正常执行")
… finally:
… print("执行完成")
请输入一个整数: a
请输入正确的整数
执行完成
可以看到,程序根据用户的不同输入执行了不同的异常处理分支代码块,并在最后执行了 finally 代码块。通常来说,当函数或方法执行出现异常时,异常将被传递给函数或方法的调用方,若逐级传递到主程序,仍然没有对应的异常处理代码块,程序才会最终被终止。因此可以在主函数中适当增加异常捕获代码。
除了代码执行自动抛出异常外,编程者还可以根据程序业务功能需求,人为地抛出异常,这种情况下可以使用 raise 语句,例如:
try: raise Exception except Exception: print("This is an Exception")
上述代码的运行结果如下所示:
>>> try:
… raise Exception
… except Exception:
… print("This is an Exception")
This is an Exception
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23755.html