异常概念
在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。如下表是Python常见的异常与描述:
异常 | 描述 |
---|---|
NameError | 尝试访问一个未声明的变量引发错误 |
IndexError | 索引超出序列范围引发错误 |
IndentationError | 缩进错误 |
ValueError | 传入的值错误 |
KeyError | 请求一个不存在的字典关键字引发的错误 |
IOError | 输入输出错误(如要读取的文件不存在) |
ImportError | 当import语句无法找到模块引发的错误 |
AttributeError | 当尝试访问位置的对象属性时,引发的错误 |
TypeError | 类型不合适引发的错误 |
MemoryError | 内存不足 |
ZeroDivisionError | 当除数为0时引发的错误 |
异常处理语句
try...except
语句
使用try...except
语捕获并处理异常时,把可能产生异常的代码放在try
语句块中,把处理结果放在except
语句块中:若try
执行时出现错误,将会执行except
语句块,否则将不执行except
语句块,语法结构如下:
try:block1
except [ExceptionName [as alias]]:block2
block1
:表示可能报错的代码块ExceptionName [as alias]
:可选参数,用于指定要捕获的异常。[as alias]
表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容block2
:表示进行异常处理的代码块
在捕捉异常时,如果需要同时处理多个异常,可以在
except
语句后面使用()
将可能出现的异常括起来,间隔使用逗号分割。
try...except...else
语句
还有一种方式是在try...except
的基础上加上else
子句,用于指定当try
语句没有发现异常时要执行的语句。当在try
语句执行过程中未发现异常,则执行else
子句,否则将不执行。
try...except...finally
语句
完整的异常处理语句应该包含finally
代码块,通过情况下,无论程序执行是否出现异常,而finally
语句都将会执行。其语法格式如下:
try:block1
except [ExceptionName [as alias]]:block2
finally:block3
使用 raise
语句抛出异常
如果某个函数或者方法可能会产生异常,但不想在当前函数或者方法中处理这个异常,则可以使用 raise
语句在函数或者方法中抛出异常,其语法格式如下:
raise [ExceptionName[(reason)]]
ExceptionName [(reason)]
:可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。若省略,就会把当前的错误原样抛出。reason
:参数reason
可以省略,若省略,则在抛出异常时,不附带任何描述信息。
程序调试
使用 IDLE 进行程序调试
1.首先打开IDLE Shell窗口,在主菜单选择 Debug -> Debugger 菜单项,将打开Debug Control 对话框,同时IDLE Shell 窗口将显示[DEBUG ON]
表示已处于调试状态。如下图:
2.然后在IDLE Shell窗口中选择 File -> Open 菜单项,打开需要调试的文件,然后在想要添加断点的行上右击选择 Set Breakpoint
菜单项可以添加断点,在想要取消断点的行上右击选择 Set Breakpoint
菜单项可以取消断点。添加断点的行将以黄色底纹标记,如下图:
3.在添加所需的断点(添加断点的原则是:程序执行到这个位置时,想要查看某些变量的值,就在这个位置添加一个断点)后,按F5
键,执行程序,这是Debug Control对话框中显示程序的执行信息,选择Globals
复选框,将显示全局变量,默认只显示局部变量。如下图:
4.图中可以看到调试工具栏处的提供的5个按钮。此处单击Go
按钮继续执行程序,直到执行到所设置的第一个断点处,程序才被暂停执行,在此期间,Debug Control窗口的数据将发生变化,如下图:
5.继续点击Go
按钮,将执行到下一个断点,查看变量的变化,直到全部断点全部执行完毕。调试工具栏的按钮状态将变为不可用,如图:
6.程序调试完成后,可以关闭Debug Control对话框,此时Python Shell中将显示[DEBUG OFF]
表示已经结束调试。
调试工具栏的5个按钮介绍:
按钮名称 | 功能 |
---|---|
Go | 执行跳至断点操作 |
Step | 进入要执行的函数 |
Over | 用于单步执行 |
Out | 跳出所在的函数 |
Quit | 结束调试 |
在调试过程中,如果所设置的断点处有其他函数调用,还可以单击
Step
按钮进入函数内部.当确定该函数没有问题时,可以单击Out
按钮跳出该函数;或者在调试的过程中,当需要对已经发现的问题的原因进行修改时,可以直接单击Quit
按钮结束调试。另外,如果调试的目的不是很明确(即不确认问题的位置),也可以直接单击Step
按钮进行单步执行,这样可以清晰地观察程序的执行过程和数据的变量,方便找出问题。
使用 assert
语句调试程序
还可以在代码中通过print()
函数把可能出现的变量输出,便于查看,但是会产生很多冗余信息,所以比较麻烦。因此,Python还提供了一种方法,即使用assert
语句进行调试。它一般被用于对程序某个时刻必须满足的条件进行验证。其语法格式如下:
assert expression[,reason]
expression
:条件表达式。如果表达式为真,则什么都不做,否则,将抛出AssertionError
异常。reason
:可选参数,用于对判断条件进行描述,为了以后更好的直到哪儿出现了问题。
文章地址: 暑假Python基础整理 – 异常处理及程序调试