python使用异常的目的与好处_Python之异常处理

Python 异常处理

1.捕获异常  (作用:程序运行过程中,可能会出现意想不到的异常,如果异常未被解决,程序会崩溃,停止运行)

#例如,以下例子

a='name'

print(a[10]) #报错:IndexError: string index out of range

print('今天是个好天气') #报错后面的程序将不会执行

所以,异常处理就显得很有必要

捕获异常的基础语法:

1.处理异常定义,如果出现异常,我们会让它按照事先规定的规则去执行对应的操作,从而记录报错的log日

2.语法:

try(要运行有可能出现异常的代码):

(缩进)存放可能出现报错的代码模块

except(异常):

(缩进)出现异常的时候要运行的代码(执行的操作),记录日志

一旦try里面的代码报错,会立即跳到except,try报错代码的下面的剩余语句将不会执行

try:

a= 'name'

print(a[10])print('今天是个好天气')except:print('try模块存在报错,后续程序不能被执行')

输出结果:

try模块存在报错,后续程序不能被执行

3.如果try模块下的代码没有出现异常,则正常执行,不会执行except模块下的代码

try:

a= 'name'

print(a[2])print('今天是个好天气')except:print('try模块存在报错,后续程序不能被执行')

输出结果:

m

今天是个好天气

4.一般,在写异常处理模块时,都要预先考虑到,可能会出现报错的地方,然后将其放到try里面,从而防止报错影响程序的整体执行

#前期预判

a = 'name'

print(a[2]) #a变量是一个字符串,根据索引值取字符串的值,所以可能存在索引值超出字符串的长度的报错

print('今天是个好天气')#案例二

b=12c=23

print(b*c)#b和c都是变量,如果给予b和c赋予的数据类型非int和float类型,那就会报数据类型的错误,所以此处就需要加 异常处理

5.使用try......except......语句捕获了异常,但是不清楚是哪里出现问题,是数据类型错误、超出范围错误还是其他的错误等等

面对以上的问题,可以使用 except  Exception as err:将错误类型赋值给err  ,打印出来

try:

a= 'name'

print(a[20])print('今天是个好天气')exceptException as err:print('try模块存在报错{},后续程序不能被执行'.format(err))

输出结果:

try模块存在报错string index out of range,后续程序不能被执行

注意:工作当中,最好用以上的方法捕获异常,这样就可以很直观的看到报错的内容,也好定位问题

6.捕获异常的进阶:指明出现的异常类型

方法:先不加异常,执行代码,查看程序可能出现的报错类型,然后将报错的类型加入except 语句中就行

语法:

try:

(缩进)执行的代码模块

except  报错类型  as  err:

(缩进)print('异常{}'.format(err))

finally:    ---------------->该模块属于,不管有没有报错,里面的代码都会被执行

(缩进)  print('你好世界')

lst = ['hello']

a= 4b=0try:print(a/b)print(lst[2])exceptIndexError as err:print('出现了异常:{}'.format(err))exceptZeroDivisionError as err:print('出现除法异常:{}'.format(err))finally:print('hello wold')#结果:

'''出现除法异常:division by zero

出现除法异常:division by zero

hello wold'''

7.手动抛出异常 raise

raise手动抛出异常,让程序终止运行

defjoin_team(age,gender):if age > 22:raise ValueError('年龄要小于22')print('可以加入team')print(join_team(23,'girl'))'''raise ValueError('年龄要小于22')

ValueError: 年龄要小于22'''

8.错误类型介绍(以下错误类型,可以接下来了解使用)

ImportError :无法引入模块或包

IndexError:下标索引超出序列边界

NameError:使用一个还未赋予对象的变量

TypeError:传入的对象类型与要求不符合

SyntaxError:代码逻辑语法错误,不能执行,不能捕获

ValueError:传入一个不被期望的值,即使类型不正确

KeyError:试图访问你字典里不存在的key

IOError:输入输出异常,文件操作

9.异常分组

好处:如果我们发现了一个验证级别为阻塞级别的bug,短信通知开发人员马上集合解决问题,如果不同的错误类型,异常处理的行为是一样的,组合起来,就可以简化代码

try:1 /0

['hello'][3]

{'name':'pyrhon'}['age']except(IndexError,KeyError) as e:'短信通知这里出现很严重的问题'

print('可以捕获IndexError和KeyError')exceptZeroDivisionError as e:'记录日志'

print('除法出现异常{}'.format(e))

最好不要直接用Exception,因为可以报错异常,但是也不知道报的是什么异常,再次排查问题时,会很浪费时间

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值