异常处理和程序调试

1,认识异常

1,使用异常处理机制

Python内置了一套异常处理机制,它能够降低程序开发的复杂度。当预测某些代码可能会出错时,使用try语句块来运行这些代码。

1
2
3
#如果发现了某些错误,则不会再继续执行,直接跳转至except语句块进行错误处理。
#如果没有错误发生,则except语句块不会被执行
#如果发生了不同类型的错误,可以设置不同的except语句块来分别处理不同的错误。

使用try…except语句组合来捕获错误,还可以跨越多层调用。

2,语法错误

Python中常见的错误有两种类型:语法错误和异常错误。

语法错误就是程序的写法不符合编程语言的规则。对于语法错误,在编写程序的过程中应该努力避免,在程序调试中消除。常见的语法错误:

1
2
3
#拼写错误:关键字拼写错误会提示SyntaxError错误,变量名、函数名拼写错误会提示NameError错误。
#不符合语法规范:多加或缺少括号、冒号等符号,以及表达式书写错误等。
#缩进错误:在同一个程序或者项目中,应该保持相同的缩进风格。

3,异常错误

异常就是在程序执行过程中,发生的超出预期的事件,在异常事件发生时,将会影响程序的正常执行。

1
2
3
#在程序设计过程中,由于疏忽或者考虑步骤造成的错误。这时可以在调试或运行过程中根据异常提示信息,找到错的位置和代码,并对错误代码进行分析,测试和排错。
#有些异常是不可避免的,如读写超出权限、内存溢出、传入的参数类型不一致等、对于这类异常,可以主动对异常进行捕获,并妥善进行处理,防止程序意外终止。
#主动抛出一个异常。在程序设计中,用户也可以主动抛出异常,提示用户注意特定场合下,程序会无法继续执行。

4,Python内置异常

在Python中,异常也是一种类型,所有的异常对象都继承自BaseException基类,所有使用except语句不但可以捕获该类型的错误,还可以捕获所有的子类的错误。用户自定义的异常并不直接继承BaseException,所有的异常类都是Exception继承,且都在exception模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exception模块即可使用异常。

5,如何解读错误信息

【示例】演示跟踪异常

1
2
3
4
5
6
7
def a(s):
return 10 / int(s)
def b(s):
return a(s) * 2
def c():
b('0')
c()

如果错误没有被捕获,他就会一直往上抛出异常,最后被Python解释器捕获,打印错误信息,然后退出程序。

image-20231104220854614

2,异常处理

当使用异常时,需要对异常进行捕获,然后进行妥善处理。Python提供了多个异常处理语句,方便开发者使用。

1,使用try和except

Python使用try和except语句组合可以捕获并处理异常,其语法结构如下:

1
2
3
4
try:
语句块
except 异常名称 [as 别名]:
语句块

异常名称为可选参数,设置要捕获的异常类型,如果不指定异常类型,则表示捕获全部异常类型。设置别名,主要是在异常处理代码块中方便引用异常对象。

当程序出现异常时,except子句将捕获异常,捕获后可以忽略异常,或者输出错误提示信息,或者进行补救,但是程序将继续执行。

【示例1】设计捕获所有的异常。本示例在try子句中编写一个错误的除法运算,然后使用except子句捕获这个错误。

1
2
3
4
5
try:
5/0
except:
print('不能除以0')
print('程序继续执行')

输出结果:

1
2
不能除以0
程序继续执行

【示例2】设计