python基础语法第9关作业_Python基础语法 第9节课(异常处理)

异常处理

一、捕获异常

1.背景:即程序出现了意想不到的情况,bug,如果异常不解决,程序会崩溃,停止运行

lst = ['hello']#此处有很多行代码

print(lst[9])#异常,取不到索引为9的数据print('running')#后面的代码都无法再正常运行

.

.

.

最基础的异常捕获

2.异常捕获(捕获异常)

如果出现异常,我们会让它按照事先规定的规则去执行对应的操作,记录错误日志:log

语法:

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

要运行的代码

except(异常):

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

注:1.try的语句会执行,不然就不会报错了。

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

lst = ['hello']try:print(lst[9])except:print('记录错误日志')print('running....')print('finish')'''

记录错误日志

running....

finish

'''

3.如果try里面的代码没有出现异常,就不会执行except

lst = ['hello']try:print(lst[0])print('python-lemon')#try里面没有异常,都会执行完,不会进入except

except:print('记录错误日志')print('running....')'''

hello

python-lemon

running....

'''

3.try......except Exception as err......

好的程序员:知道什么代码需要放到try里面

#需不需要加异常??

a = 4b= 2

print(a*b)

a,b是变量,事先不知道是什么数据类型,就需要加异常,否则如果输入的是字符串,列表啥的,就会报错;如果事先知道就是int/float,就不需要加异常

a = '4'b= 'q'

try:print(a*b)except:print('参数错误,记录日志')

上面的try.....except....捕获了异常,但是不知道到底是哪里出了bug.下面用:except Exception as err.会把错误类型赋值给err

a = 4b=0try:print(a/b)exceptException as err:print('出现了异常:{}'.format(err))#结果:出现了异常:division by zero

在实际操作中,最好用这个方法(try......except Exception as err......)。

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

先不要加异常,让它报错(开发主动报错),将报错的类型记住,去异常捕获的时候,加入except语句中

语法:

try:

代码

except 错误类型 as err:

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

finally:-------------------→不管有没有报错,finally里面的代码都会执行。

print('hello word')

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

'''

二、手动抛出异常raise

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

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

raise ValueError('年龄要小于22')

ValueError: 年龄要小于22

'''

错误类型介绍

ImportError:无法引入模块或包

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

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

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

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

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

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

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

1.SyntaxError --------语法错误不能被捕获

try:

ldljsdjlg'khkhkh'

except:print('语法错误')#结果显示错误,不能捕获异常

'''

ldljsdjlg'khkhkh'

^

SyntaxError: invalid syntax

'''

2.KeyError

dict1 = {'1':'one','2':'two'}print(dict1['3'])'''

print(dict1['3'])

KeyError: '3'

'''

3.IndexError

lst2 = [1,5,[8,9],'hello']print(lst2[5])'''

print(lst2[5])

IndexError: list index out of range

'''

4.ValueError

a = 4

print(int('a'))'''print(int('a'))

ValueError: invalid literal for int() with base 10: 'a''''

三、异常分组

好处:如果你们发现了一个验证级别为阻塞级别的bug,短信通知开发人员马上集合解决问题

如果不同的错误类型,异常处理的行为是一样的(短信通知),组合起来,可以简化代码。

try:1 /0

['hello'][3]

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

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

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

最好不要直接用Exception,因为自己都不知道报什么错!------------最好避免!

try:1/0exceptException as e:print('其他类型的异常')

四、了解即可

try:

.....

except :

.......

else:

........

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值