封面图片来源:沙沙野

异常处理什么是异常处理?Python 解释器检测到错误就会触发异常,或者程序员自己触发异常

程序中编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行为其定制的逻辑,使程序不会崩溃,这就是异常处理

2. 为什么要进行异常处理?Python 解析器去执行程序,检测到了一个错误时,触发异常

异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行。

所以必须提供一种异常处理机制来增强程序的健壮性与容错性

3. 如何进行异常处理?首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

try:

l1 = [1, 2, 3]

l1[100] # 代码运行到这里就结束了

print(111)

dic = {"key1": "v1"}

dic["key2"] # 这里不会报错

except IndexError:

print("索引值超过了范围,程序报错")

# 运行结果:

索引值超过了范围,程序报错

4. except 的错误与实际报错对不上的情况

try:

dic = {"key1": "v1"}

dic["key2"]

except IndexError as i:

print("索引错误")

# 运行结果:

Traceback (most recent call last):

File "test01.py", line 4, in

dic["key2"]

KeyError: 'key2'

# 之所以不显示 IndexError 的内容

# 是因为这不是 IndexError, 而是 KeyError

5. 多个 except 的情况

try:

l1 = [1, 2, 3]

l1[100]

print(111)

dic = {"key1": "v1"}

dic["key2"]

num = int(input("请输入数字:"))

except KeyError as kIndex:

print(111)

except IndexError as i:

print(222)

except ValueError as v:

print(333)

# 运行结果:

222

# 根据 Python 逐行解释、从上往下的执行方式

# 先捕捉到某个异常之后,就执行相对 except 的异常处理

6. 万能异常

try:

l1 = [1, 2, 3]

l1[100]

print(111)

dic = {"key1": "v1"}

dic["key2"]

num = int(input("请输入数字:"))

except Exception as e:

print(e)

# 运行结果:

list index out of range

# 同理,先捕捉哪个异常就提示对应的错误信息

# 此时,程序已经结束执行,后面及时还有异常也不管了

7. 上面的方法不是说哪一种就绝对好,应该视情况来写异常处理。如果对报错信息不关心,只是想直接跳过报错而不分流执行代码,使用万能异常。

s = "hello"

try:

int(s)

except Exception as e:

print(e)

print("即使捕捉到了异常,只要使用的是万能异常处理的,程序就还能够继续执行")

# 运行结果:

invalid literal for int() with base 10: 'hello'

即使捕捉到了异常,只要使用的是万能异常处理的,程序就还能够继续执行

8. 虽然使用 Exception 是可以捕捉所有异常,但也意味着在处理所有异常时都使用同一个逻辑去处理。如果想要捕捉具体的错误信息,根据不同的错误执行不同的分支,则使用多分支比较好

s = 'hello'

try:

int(s)

except IndexError as i:

print(i)

except KeyError as k:

print(k)

except ValueError as v:

print(v)

# 运行结果:

invalid literal for int() with base 10: 'hello'

9. 使用多分支的时候,最后加上一个 Exception 使逻辑更加完整

s = 'hello'

try:

int(s)

except IndexError as i:

print(i)

except KeyError as k:

print(k)

except ValueError as v:

print(v)

except Exception as e:

print(e)

10. 异常处理的其他方式

s = 'hello'

try:

int(s)

except IndexError as i:

print(i)

except KeyError as k:

print(k)

except ValueError as v:

print(v)

else:

print("如果 try 代码块的内容没有异常就执行我")

finally:

print("无论上面的逻辑是否有异常,我都会被执行")

# 运行结果:

invalid literal for int() with base 10: 'hello'

无论上面的逻辑是否有异常,我都会被执行

11. finally 的作用非常强大,程序有没有异常它都会执行,可以用在多个地方。比如关闭文件句柄,数据库链接等

with open("test", encoding="utf-8") as f:

try:

pass

finally:

f.close()

12. 自定义异常

try:

raise TypeError('类型错误')

except Exception as e:

print(e)

# 自定义异常

class EvaException(BaseException):

def __init__(self,msg):

self.msg=msg

def __str__(self):

return self.msg

try:

raise EvaException('类型错误')

except EvaException as e:

print(e)

13. 异常处理 try...except... 总结try...except... 这种异常处理机制就是取代 if 条件语句,目的是让程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型,对于同一个异常,一个 except 就可以捕捉到,可以同时处理多段代码的异常,无需写多个 if 判断,减少代码,增强了可读性

把错误处理和真正的工作分开来,代码更易组织,更清晰,复杂的工作任务更容易实现

另外,还有一点:不至于由于一些小的疏忽而使程序意外崩溃

虽然上面列举了各种优点,但是 try...except... 应该尽量少用,因为它本身就是附加给程序的一种异常处理的逻辑,与主要的工作是没多大关系的

PS: 为了方便大家相互交流、解决学习过程中遇到的问题,我新建了一个 QQ 群,感兴趣的小伙伴加进来一起学习吧!~ (群号码:697678250,加群请备注:笔记)

python异常处理的作用_Python 中的异常处理方式相关推荐

  1. python异常处理的作用_python之路——异常处理

    https://www.cnblogs.com/Eva-J/articles/7281240.html 异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了p ...

  2. python 闭包的作用_python中对闭包的理解

    运行环境声明:本人的代码在sublime text 3中写的,可以Ctrl+b运行.python版本是python3.6.如果您直接运行的,请自觉加入if __name__ == '__main__' ...

  3. python斜杠作用_Python中正反斜杠(‘/’和‘\’)的意义与用法

    刚刚在学习些测试报告的时候,出现一个路径的问题,找了很久的原因,竟然是少了一个反斜杠引起的,在此顺便记录一下正反斜杠的作用. 在Python中,记录路径时有以下几种写法,如:(大家都知道\n是换行的意 ...

  4. python中括号的作用_python中中括号

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在python语言中最常见的括号有三种,分别是:小括号().中括号:代表list ...

  5. python变量的作用_Python中的变量

    Python中的变量是用来表示一个值的标识符.变量代表了计算机内存中的一个地址.变量允许在程序中访问其他对象,调用函数或执行其他运算. 1.变量命名规则 变量是Python中的标识符,它应该遵循标识符 ...

  6. python signal模块作用_Python中的signal模块和Ctrl+C操作

    Python中的signal模块处理OS级别的信号.例如Ctrl+C会进程发送信号. Linux上查看信号的方法: [appadmin@BJLTPGPLM1007T ~]$ kill -l 1) SI ...

  7. python pyc文件作用_Python中pyc文件的用途

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的 ...

  8. python json解析方法_Python 中的 JSON 方式讲解

    Python的dict对象可以直接序列化为JSON的{},不过,很多时候,我们更喜欢用class表示对象,比如定义Student类,然后序列化,代码如下:import json class Stude ...

  9. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

最新文章

  1. mvc4.0 html.actionlink comfired,未触发MVC 5远程验证
  2. C语言基础-第一个C程序
  3. 如何在 React Native 中写一个自定义模块
  4. 用实例分析H264 RTP payload
  5. mcu比较器技巧和诀窍_如何准备技术面试-技巧和窍门,以帮助您表现最好
  6. 程序语言python循环_Python 循环语句
  7. hadoop 自定义分区
  8. java线程 属性_Java 线程基础
  9. 前端面试送命题(一)-JS三座大山
  10. 做报表5年,被批Excel毫无新意,能开发的可视化报表让我重获新生
  11. 不懂算法的程序员不是好工程师!
  12. Ubuntu安装GCC 3.4
  13. Mac版Charles免费安装及使用
  14. 识读第三角视图(机械识图)
  15. javaMail简单发送邮件
  16. 好玩的Ipaddian
  17. KEIL-51单片机实现自定义bootloader,用于程序更新 研究
  18. linux的dep文件是什么意思,DEP 文件扩展名: 它是什么以及如何打开它?
  19. t检验 显著性检验 significance test
  20. 信息安全实训笔记1——身份认证技术

热门文章

  1. 更改表格行tr的背景颜色
  2. html idv垂直居中,1.2.7 Excel表格打印技巧
  3. Duplicate named routes definition
  4. 如何使用eNSP模拟器连接本地虚拟机
  5. 勤奋,不足以让你过上好日子
  6. 明星企业Argo AI倒下:曾估值超70亿美元 烧掉数十亿美元
  7. bookxnote手机版_BookxNote
  8. 语文文学常识。不转可惜!谁整理的?太佩服啦!
  9. IIS 站点配置文件
  10. 树图链NFT数字藏品系统开发