python 异常处理(25)
admin
2023-01-29 08:20:03
0

在python开发中,代码书写时难免有疏忽或者意向不到的bug,导致程序run的过程中有可能会直接崩溃;然后对于程序猿而言,程序因bug崩溃是家常便饭,为了增加程序的健壮性,防止程序崩溃,我们可以对程序的有可能发生崩溃的代码增加异常处理,以达到程序稳健运行的目的。

python 异常处理(25)

 

一.异常的概念

一般情况,python无法正常处理程序时,就是会产生异常,举个例子:

1.大家都知道分母不能为0,如果分母为0,程序必然崩溃;

1

2

3

x = 3/0

 

程序崩溃/报错:ZeroDivisionError: division by zero

 

2.假如 python文件读写 中,我们讲解了文件的读写操作,如果我们对一个不存在的文件读取内容,程序必然也会崩溃;

1

2

3

4

# 读取123.txt文件,实际上该文件并不存在

fp =open("123.txt","r")

 

程序崩溃/报错:FileNotFoundError: [Errno 2] No such file or directory: '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 — 用户代码生成的警告

 

python 异常处理(25)

二.捕获异常方式

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()

except IOError:

    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()

except GeneratorExit:

    print("异常说明:GeneratorExit")

except FloatingPointError:

    print("异常说明:FloatingPointError")

except OverflowError:

    print("异常说明:OverflowError")

except ZeroDivisionError:

    print("异常说明:ZeroDivisionError")

except IOError:

    print("异常说明:IOError")

 

print("程序正常结束")

输出结果:

1

2

异常说明:IOError

程序正常结束

 

4.万能的异常捕获


1

2

3

4

try:

    < 语句 >

except Exception as e: # 自动识别异常信息,并将异常信息保存在e中

    print('异常说明:',e)

示例代码:

1

2

3

4

5

6

7

8

try:

    fp = open("python.txt","r") # 程序出现异常,不会继续执行后面的代码

    print("hello world")

    fp.close()

except Exception as e:

    print("异常说明:",e)

 

print("程序正常结束")

输出结果:

1

2

异常说明: [Errno 2] No such file or directory: 'python.txt'

程序正常结束

 

python 异常处理(25)

 

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")

except GeneratorExit:

    print("异常说明:GeneratorExit")

except FloatingPointError:

    print("异常说明:FloatingPointError")

except OverflowError:

    print("异常说明:OverflowError")

except ZeroDivisionError:

    print("异常说明:ZeroDivisionError")

else:

    print("i love you")

 

print("程序正常结束")

输出结果:

1

2

3

hello world

i love you

程序正常结束

 

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()

except Exception as e:

    print("异常说明:",e)

finally:

    print("finally") # 无论是否发生异常都将会执行最后的代码

 

print("程序正常结束")

输出结果:

1

2

3

异常说明: [Errno 2] No such file or directory: 'python.txt'

finally

程序正常结束

 

7.raise主动触发异常

可以使用raise语句自己触发异常,语法如下:

1

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,IOError )参数标准异常中任一种,args 是自已提供的异常参数。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象;示例代码如下:

1

2

3

4

5

6

7

try:

    raise Exception("raise Exception!")  # 触发异常后,后面的代码就不会再执行

    print("hello world")

except Exception as e:

    print(e)

finally:

    print("OK")

输出结果:

1

2

raise Exception!

OK

python 异常处理(25)

 

四.重点总结

在python开发中,为了增加程序的健壮性,异常处理try…except…是必须掌握的内容.

 

猜你喜欢:

1.python文件读写操作

2.python内置函数input/eval

 

转载请注明:猿说Python » python异常处理


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...