python异常处理的必要性_python异常处理(30)

文章首发微信公众号,微信搜索:猿说python

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

一.异常的概念

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

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

x = 3/0

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

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

# 读取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 — 用户代码生成的警告

二.捕获异常方式

1.捕获所有异常

try:

except:

print("异常说明")

示例代码:

# !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("程序正常结束")

输出结果:

异常说明:分母不能为0

程序正常结束

2.捕获指定异常

try:

< 语句 >

except < 异常名 >:

print('异常说明')

示例代码:

try:

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

print("hello world")

fp.close()

except IOError:

print("异常说明:文件读取失败")

print("程序正常结束")

输出结果:

异常说明:文件读取失败

程序正常结束

3.捕获多个异常

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代码中。

示例代码:

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("程序正常结束")

输出结果:

异常说明:IOError

程序正常结束

4.万能的异常捕获

try:

< 语句 >

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

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

示例代码:

try:

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

print("hello world")

fp.close()

except Exception as e:

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

print("程序正常结束")

输出结果:

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

程序正常结束

5.异常中的 else

如果判断完没有异常之后还想做其他事,就可以使用下面这样的else语句,注意:是在try中没有异常情况下,才会执行else之后的代码。

try:

< 语句 >

except < 异常名1 >:

print('异常说明1')

except < 异常名2 >:

print('异常说明2')

else:

< 语句 > # try语句中没有异常则执行此段代码

示例代码:

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("程序正常结束")

输出结果:

hello world

i love you

程序正常结束

6.异常中的finally

try…finally…语句无论是否发生异常都将会执行最后的代码。

try:

< 语句 >

finally:

< 语句 >

示例代码:

try:

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

print("hello world")

fp.close()

except Exception as e:

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

finally:

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

print("程序正常结束")

输出结果:

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

finally

程序正常结束

7.raise主动触发异常

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

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

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

try:

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

print("hello world")

except Exception as e:

print(e)

finally:

print("OK")

输出结果:

raise Exception!

OK

四.重点总结

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

猜你喜欢:

想了解更多python内容请直接搜索微信公众号:猿说pythonPython教程 - 猿说Python​www.shuopython.com

本人也还在学习python中,博客会持续更新ing,有兴趣的小伙伴关注走一波,推荐浏览个人博客网站:猿说python,文章采用树状分类,结构目录清晰一点,文章内容有问题的话欢迎给出建议或者直接留言.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的异常处理(Exception Handling)是指在程序执行过程中可能会发生的错误或异常情况,我们可以通过使用异常处理机制来捕获并处理这些异常,从而使程序具备更强的鲁棒性和可靠性。 Python中的异常处理主要包含以下几个关键字: - try:用于捕获异常,放在可能发生异常的代码块前面。 - except:用于处理捕获到的异常,可以指定捕获的异常类型。 - else:用于在没有发生异常的情况下执行的代码块。 - finally:无论是否发生异常,都会执行的代码块。 例如,以下代码展示了Python中的异常处理机制: ``` try: num1 = int(input("请输入一个整数:")) num2 = int(input("请再输入一个整数:")) result = num1 / num2 print("两个数相除的结果为:", result) except ValueError: print("输入的不是整数!") except ZeroDivisionError: print("除数不能为0!") else: print("程序执行完毕!") finally: print("无论是否发生异常,都会执行的代码块!") ``` 在上述代码中,我们通过try和except关键字来捕获可能出现的ValueError和ZeroDivisionError异常,并在except代码块中进行处理。当没有异常发生时,会执行else代码块中的代码,而无论是否发生异常,finally代码块中的代码都会被执行。 希望这个简单的例子能够帮助你理解Python异常处理机制。 ### 回答2: Python异常处理是一种在代码中处理错误和异常情况的机制。在程序运行过程中,可能会出现各种错误,如变量未定义、除零错误或文件不存在等等。如果没有适当的异常处理机制,这些错误可能会导致程序崩溃。 Python异常处理通过使用try-except语句来实现。在try块中,我们编写可能导致错误的代码。如果try块中的代码引发了异常,那么程序将不会崩溃,而是会跳转到对应的except块中执行相应的异常处理代码。 except块用于捕获和处理特定类型的异常。我们可以定义多个except块来处理不同类型的异常,以确保程序能够适当地响应各种错误情况。在except块中,我们可以编写处理异常的代码,如打印错误信息、记录日志、重新尝试等。如果没有匹配到相应的except块,那么异常将会被传递到更高层的代码中进行处理,直到存在适当的except块为止。 除了try-except语句,还可以使用finally块来确保无论有无异常发生,某些代码都会得到执行。在finally块中,我们可以编写释放资源、清理代码等操作,以确保程序在结束时执行必要的操作。 异常处理的优点在于它使得程序更加健壮和可靠。无论发生什么错误,程序都会根据预先提供的异常处理代码来进行响应,而不会意外终止。这有助于提高程序的稳定性,并且使得调试和维护工作更加容易。 总之,Python异常处理是一种非常重要和强大的机制,它能够有效地处理和管理程序中的各种错误和异常情况,保证程序的正常运行以及错误处理的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值