在python开发中,代码书写时难免有疏忽或者意向不到的bug,导致程序run的过程中有可能会直接崩溃;然后对于程序猿而言,程序因bug崩溃是家常便饭,为了增加程序的健壮性,防止程序崩溃,我们可以对程序的有可能发生崩溃的代码增加异常处理,以达到程序稳健运行的目的。
成都创新互联专注于弥渡网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供弥渡营销型网站建设,弥渡网站制作、弥渡网页设计、弥渡网站官网定制、小程序定制开发服务,打造弥渡网络公司原创品牌,更为您提供弥渡网站排名全网营销落地服务。
一.异常的概念
一般情况,python无法正常处理程序时,就是会产生异常,举个例子:
1.大家都知道分母不能为0,如果分母为0,程序必然崩溃;
1 2 3 | x=3/0
程序崩溃/报错:ZeroDivisionError:divisionbyzero |
2.假如 python文件读写 中,我们讲解了文件的读写操作,如果我们对一个不存在的文件读取内容,程序必然也会崩溃;
1 2 3 4 | # 读取123.txt文件,实际上该文件并不存在 fp=open("123.txt","r")
程序崩溃/报错:FileNotFoundError:[Errno2]Nosuchfileordirectory:'123.txt' |
对于以上的各种异常情况,我们可以通过 try…except…解决,那么具体有哪些异常能捕获呢?如下所示:
1.BaseException — 所有异常的基类
2.SystemExit — 解释器请求退出
3.KeyboardInterrupt — 用户中断执行(通常是输入^C)
4.Exception — 常规错误的基类
5.StopIteration — 迭代器没有更多的值
6.GeneratorExit — 生成器(generator)发生异常来通知退出
7.StandardError — 所有的内建标准异常的基类
8.ArithmeticError — 所有数值计算错误的基类
9.FloatingPointError — 浮点计算错误
10.OverflowError — 数值运算超出最大限制
11.ZeroDivisionError — 除(或取模)零 (所有数据类型)
12.AssertionError — 断言语句失败
13.AttributeError — 对象没有这个属性
14.EOFError — 没有内建输入,到达EOF 标记
15.EnvironmentError — 操作系统错误的基类
16.IOError — 输入/输出操作失败
17.OSError — 操作系统错误
18.WindowsError — 系统调用失败
19.ImportError — 导入模块/对象失败
20.LookupError — 无效数据查询的基类
21.IndexError — 列中没有此索引(index)
22.KeyError — 映射中没有这个键
23.MemoryError — 内存溢出错误(对于Python 解释器不是致命的)
24.NameError — 未声明/初始化对象 (没有属性)
25.UnboundLocalError — 访问未初始化的本地变量
26.ReferenceError — 弱引用(Weak reference)试图访问已经垃圾回收了的对象
27.RuntimeError — 一般的运行时错误
28.NotImplementedError — 尚未实现的方法
29.SyntaxError — Python 语法错误
30.IndentationError — 缩进错误
31.TabError — Tab 和空格混用
32.SystemError — 一般的解释器系统错误
33.TypeError — 对类型无效的操作
34.ValueError — 传入无效的参数
35.UnicodeError — Unicode 相关的错误
36.UnicodeDecodeError — Unicode 解码时的错误
37.UnicodeEncodeError — Unicode 编码时错误
38.UnicodeTranslateError — Unicode 转换时错误
39.Warning — 警告的基类
40.DeprecationWarning — 关于被弃用的特征的警告
41.FutureWarning — 关于构造将来语义会有改变的警告
42.OverflowWarning — 旧的关于自动提升为长整型(long)的警告
43.PendingDeprecationWarning — 关于特性将会被废弃的警告
44.RuntimeWarning — 可疑的运行时行为(runtime behavior)的警告
45.SyntaxWarning — 可疑的语法的警告
46.UserWarning — 用户代码生成的警告
二.捕获异常方式
1.捕获所有异常
1 2 3 4 | try: <代码> except: print("异常说明") |
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython.com @WeChat Official Account(微信公众号):猿说python @Github:www.github.com @File:try_except.py @Time:2019/10/9 21:27
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! """
try: x=3/0# 程序出现异常,不会继续执行后面的代码 print("hello world") except: print("异常说明:分母不能为0")
print("程序正常结束") |
输出结果:
1 2 | 异常说明:分母不能为0 程序正常结束 |
2.捕获指定异常
1 2 3 4 | try: <语句> except<异常名>: print('异常说明') |
示例代码:
1 2 3 4 5 6 7 8 | try: fp=open("123.txt","r")# 程序出现异常,不会继续执行后面的代码 print("hello world") fp.close() exceptIOError: print("异常说明:文件读取失败")
print("程序正常结束") |
输出结果:
1 2 | 异常说明:文件读取失败 程序正常结束 |
3.捕获多个异常
1 2 3 4 5 6 7 8 | try: <语句> except<异常名1>: print('异常说明1') except<异常名2>: print('异常说明2') except<异常名3>: print('异常说明3') |
该种异常处理语法的规则是:
a.执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
b.如果第一个except中定义的异常名与引发的异常匹配,则执行该except中的语句。
c.如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
d.如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | try: fp=open("123.txt","r")# 程序出现异常,不会继续执行后面的代码 print("hello world") fp.close() exceptGeneratorExit: print("异常说明:GeneratorExit") exceptFloatingPointError: print("异常说明:FloatingPointError") exceptOverflowError: print("异常说明:OverflowError") exceptZeroDivisionError: print("异常说明:ZeroDivisionError") exceptIOError: print("异常说明:IOError")
print("程序正常结束") |
输出结果:
1 2 | 异常说明:IOError 程序正常结束 |
4.万能的异常捕获
1 2 3 4 | try: <语句> exceptExceptionase:# 自动识别异常信息,并将异常信息保存在e中 print('异常说明:',e) |
示例代码:
1 2 3 4 5 6 7 8 | try: fp=open("python.txt","r")# 程序出现异常,不会继续执行后面的代码 print("hello world") fp.close() exceptExceptionase: print("异常说明:",e)
print("程序正常结束") |
输出结果:
1 2 | 异常说明:[Errno2]Nosuchfileordirectory:'python.txt' 程序正常结束 |
5.异常中的 else
如果判断完没有异常之后还想做其他事,就可以使用下面这样的else语句,注意:是在try中没有异常情况下,才会执行else之后的代码。
1 2 3 4 5 6 7 8 | try: <语句> except<异常名1>: print('异常说明1') except<异常名2>: print('异常说明2') else: <语句> # try语句中没有异常则执行此段代码 |
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | try: print("hello world") exceptGeneratorExit: print("异常说明:GeneratorExit") exceptFloatingPointError: print("异常说明:FloatingPointError") exceptOverflowError: print("异常说明:OverflowError") exceptZeroDivisionError: print("异常说明:ZeroDivisionError") else: print("i love you")
print("程序正常结束") |
输出结果:
1 2 3 | helloworld iloveyou 程序正常结束 |
6.异常中的finally
try…finally…语句无论是否发生异常都将会执行最后的代码。
1 2 3 4 | try: <语句> finally: <语句> |
示例代码:
1 2 3 4 5 6 7 8 9 10 | try: fp=open("python.txt","r")# 程序出现异常,不会继续执行后面的代码 print("hello world") fp.close() exceptExceptionase: print("异常说明:",e) finally: print("finally")# 无论是否发生异常都将会执行最后的代码
print("程序正常结束") |
输出结果:
1 2 3 | 异常说明:[Errno2]Nosuchfileordirectory:'python.txt' finally 程序正常结束 |
7.raise主动触发异常
可以使用raise语句自己触发异常,语法如下:
1 | raise[Exception[,args[,traceback]]] |
语句中 Exception 是异常的类型(例如,IOError )参数标准异常中任一种,args 是自已提供的异常参数。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象;示例代码如下:
1 2 3 4 5 6 7 | try: raiseException("raise Exception!") # 触发异常后,后面的代码就不会再执行 print("hello world") exceptExceptionase: print(e) finally: print("OK") |
输出结果:
1 2 | raiseException! OK |
四.重点总结
在python开发中,为了增加程序的健壮性,异常处理try…except…是必须掌握的内容.
猜你喜欢:
1.python文件读写操作
2.python内置函数input/eval
转载请注明:猿说Python » python异常处理
文章标题:python异常处理(25)
文章出自:http://lswzjz.com/article/jpogcg.html