1.Python中常见的异常及描述
| 异常 | 描述 |
| NameError | 尝试访问一个没有声明的变量引发的错误 |
| IndexError | 索引超出序列范围引发的错误 |
| IndentationError | 缩进错误 |
| ValveError | 传入的值的错误 |
| IOError | 输入输出错误 |
| importError | 当import无法找到模块或from无法在模块中找到相应的名称引发的错误 |
| AttributeErrot | 尝试访问未知的对象引发的错误 |
| TypeError | 类型不合适引发的错误 |
| MemoryError | 内存不足 |
| ZeroDivisionError | 除数为0引发的错误 |
| KeyError | 请求一个不存在的字典关键字引发的错误 |
2 异常处理语句
2.1 try...except语句
语法:
try: block1 except [ExceptionName [as alias]]: block2
参数:
block1:表示能出现错误的代码块。
exceptionName [as alias]:可选参数,用于指定要捕获的异常名,as可以指定别名
说明:
在使用try...except语句捕获异常时,如果在except后面不指定异常名称,则表示捕获全部异常。
block2:表示进行异常处理的代码块,这里可以输出固定的提示信息,也可通过别名输出异常的具体内容。
说明:
使用try...except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。
2.2 try...except...else语句
在try...except语句基础上增加一个else,用于指定当try语句块没有发声异常时要执行的语句块。该语句块中的内容在try语句中发现异常的时候,将不被执行。即else是无异常时的语句。
2.3 try...except...finally语句
完整的异常处理语句应该包含finally语句。通常情况下,无论程序中有无异常产生,finally代码块中的代码都会被执行。
语法:
try: block1 except [ExceptionName [as alias]]: block2 finally: block3
说明
如果程序中有一些在任何情形中都必须执行的代码,那么久可以把它们放在finally语句的区块中。
说明
使用except子句是为了允许处理异常。无论是否引发了异常,使用finally子句都可以执行。如果分配了有限的资源(如打开文件),则应将释放这些资源的代码放置到finally块中。
实操中将关闭操作放在finally块中。
2.4 使用raise语句抛出异常如果在某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在韩硕活方法中抛出异常。格式如下:
raise [ExceptionName[(reason)]]
参数:
ExceptionName:用于指定抛出的异常名称
reason:异常信息的描述。省略则不带描述。
以上两个参数为选参,如果省略,就会把当前的错误原样抛出。
3 程序调试3.1使用自带的IDLE进行程序调试
(1)打开IDLE,在主菜单选择Debug——>Debugger菜单项,窗口显示[DEBUG ON]表示已经处于调试状态
(2)python3.7.0Shell窗口,选择File->Open菜单项,打开要调试的文件,设置断点
断点的作用:设置断点后,程序执行到断点时,就会暂时中断执行,程序可以随时继续。
添加断点:在要添加断点的代码行上,单击右键,选择“Set Breakpoint”,添加断点的行将以黄色底纹标记。
删除断点:右键选择“Clear Breakpoint”
添加断点的原则:程序执行到这个位置时,想要查看某些变量的值,在这个位置添加一个断点
(3)执行
(4)调试结束,显示DEBUG OFF
3.2 使用assert语句调试程序assert是断言的意思,一般用于对程序某个时刻必须满足的条件进行验证。语法如下:
assert expression [,reason]
参数:
expression:条件表达式,True时,什么都不做,False时,抛出AssertionError异常
reason:可选参数,对判断条件条件进行描述。
assert通常和异常处理语句结合使用
try:
division() # 调用函数
except AssertError as e: # 处理AssertError异常
print("n输出有误:",e)
assert语句只在调试阶段有效
python -O Demo.py #关闭assert语句



