Python 基础学习笔记 5 —— 异常的处理


一、概述

在程序的运行过程中,难免发生一些异常的情况。这些异常情况可以是程序的逻辑错误,也可以是程序员手工制造的错误。

而 Python 不像 Shell,一旦遇到异常情况而不做处理的话,程序就会立即停止运行并报错。

所以,异常处理是 Python 编程中必不可少的一部分。


二、仅让出错的程序能够继续运行下去

用法举例

构建一个循环体,在循环体中故意制造一个异常,然后进行异常处理,使得程序继续运行下去。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

for a in range(1,6):
    try:    #尝试执行以下代码段
        print('a的值为{}'.format(a))
        if a==3:    #当a等于3时,故意制造一个异常
            Print('err')
    except: #如果上面的代码段出现异常,立即执行以下的异常处理语句(except 之前的语句不会继续执行)
        print('出现一个错误')
        print('继续执行')
    else:  #没有发生异常时,执行以下语句
       print('本次循环正常')
    finally:   #不管有没有发生异常,最后都执行以下语句(可选)
       print('完成一次循环\n')
print('程序运行完毕')

运行结果:

a的值为1
本次循环正常
完成一次循环

a的值为2
本次循环正常
完成一次循环

a的值为3
出现一个错误
继续执行
完成一次循环

a的值为4
本次循环正常
完成一次循环

a的值为5
本次循环正常
完成一次循环

程序运行完毕

三、为特定的异常做特定的处理

用法举例

让用户手工输入一个表达式来进行数学运算,并对一些特定的异常进行处理。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

while True:
    try:
        ans=eval(input("请输入一个表达式来计算,按 Ctrl+C 或 Ctrl+D 来退出:"))
    except EOFError:            #遇到文件末尾(Ctrl+D)异常时,执行以下语句
        break
    except KeyboardInterrupt:   #遇到键盘中断(Ctrl+C)异常时,执行以下语句
        break
    except ZeroDivisionError:   #遇到除数为零异常时,执行以下语句
        print("除数不能为零,请检查表达式!")
    except :                    #遇到其他异常时,执行以下语句
        print("参数错误,请检查表达式!")
    else:                       #无异常时,执行以下语句
        print("计算结果:{}".format(ans))

print("已退出!")

#输入 9*9 回车
#输入 8/0 回车
#输入 xx 回车
#按 Ctrl+C

运行结果:

请输入一个表达式来计算,按 Ctrl+C 或 Ctrl+D 来退出:9*9
计算结果:81
请输入一个表达式来计算,按 Ctrl+C 或 Ctrl+D 来退出:8/0
除数不能为零,请检查表达式!
请输入一个表达式来计算,按 Ctrl+C 或 Ctrl+D 来退出:xx
参数错误,请检查表达式!
请输入一个表达式来计算,按 Ctrl+C 或 Ctrl+D 来退出:^C已退出!

注:

可以执行 dir(__builtins__) 来查看系统内建的所有异常。


四、手工抛出内建的异常

用法举例

让用户输入一个长度大于 5 的字符串然后打印出来,如果长度小于 5 ,则触发一个 IOError 异常,并对该异常进行处理。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

try:
    a=input("请输入一个长度大于 5 的字符串:")
    if len(a)<=5:  
        raise IOError #抛出 IOError 异常
except IOError: #捕获 IOError 异常并进行处理
    print("输入的字符串太短了!")

print("输入的字符串是:{}".format(a))

#输入 sss 回车

运行结果:

请输入一个长度大于 5 的字符串:sss
输入的字符串太短了!
输入的字符串是:sss

五、自建异常

用法举例

在上节程序的基础上,自建一个 taiduanle 的异常类,并触发它(不作处理)。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

class taiduanle(Exception): #定义一个异常,注意需要继承异常类
    pass

a = input("请输入一个长度大于 5 的字符串:")
if len(a)<=5:  
    raise taiduanle #抛出 taiduanle 异常
print("输入的字符串是:{}".format(a))

#输入 sss 回车

运行结果:

请输入一个长度大于 5 的字符串:sss
Traceback (most recent call last):
  File "./Desktop/test1.py", line 9, in <module>
    raise taiduanle #抛出 taiduanle 异常
__main__.taiduanle

发表评论

电子邮件地址不会被公开。