开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。
总的来说,编写程序时遇到的错误可大致分为 2 类,分别为语法错误和运行时错误。
语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解释器在解析时就会报出 SyntaxError 语法错误,与此同时还会明确指出最早探测到错误的语句。
语法错误多是开发者疏忽导致的,属于真正意义上的错误,是解释器无法容忍的,因此,只有将程序中的所有语法错误全部纠正,程序才能执行。
但是程序在执行时出现了非正常的情况,无法再执行下去,这就是运行时错误。运行时的错误涉及到异常的概念了。
一、异常的概念
程序在运行时,如果 Python 解释器遇到到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常。
默认情况下,出现异常,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取这个异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理叫作异常处理。
程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise)异常。
程序开发时,很难将所有的特殊情况都处理的面面俱到,通过异常捕获可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性。
二、捕获异常
1、简单的捕获异常语法
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来捕获异常。
捕获异常最简单的语法格式:
try:
尝试执行的代码
except:
出现错误的处理
try except 语句的执行流程如下:
-
首先执行 try 中的代码块,里面是不确定是否能够正常执行的代码。如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。
-
当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。
事实上,不管程序代码块是否处于 try 块中,甚至包括 except 块中的代码,只要执行该代码块时出现了异常,系统都会自动生成对应类型的异常。但是,如果此段程序没有用 try 包裹,又或者没有为该异常配置处理它的 except 块,则 Python 解释器将无法处理,程序就会停止运行;反之,如果程序发生的异常经 try 捕获并由 except 处理完成,则程序可以继续执行。
示例:要求用户输入整数。
try:
# 提示用户输入一个数字
num = int(input("请输入数字:"))
except:
print("请输入正确的数字")
2、错误类型捕获
在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了。
语法如下:
try: