python操作异常情况新手_荐第十六天学Python:异常处理

怎么能突然就停更呢/doge,就算为了加更三天跑车系列,这个Python系列也不能停对不对/doge,废话少说,直入主题:

——————————————

前言

任何人都是从初学者过来的,任何人在写程序或调试程序的时候都经历过异常报错的情况:变量错误、语法错误、逻辑错误、操作错误等等等等。这些异常都是不可避免的。

所以,针对程序异常产生的种种问题,Python语言提供了一个完整的异常处理机制:当程序运行发生异常后,我们用特定的语句可以捕捉异常,并对其作出相应的处理:

基本异常捕捉语句:

try…except…

try关键字:象征着异常捕捉语句的开始,一般在try:里写上我们希望正常执行的代码

except:用于捕捉异常,并执行异常发生时应该执行的程序

try:

主程序

except:________

异常处理程序

如果,在except:后面什么都不加的话,默认是发生任何异常的时候就执行异常处理程序,如:

>>> def out(num):

try:

num = num*0.5

return num

except:

print('输入错误!')

>>> out(1)

0.5

>>> out([1,2,3])

输入错误!

但是这种写法只能适用于基本的任务——因为我们不知道发生了什么异常。所以,为了保证程序的严谨与科学性,我们往往需要在expect 后面加上指定的异常信息

指定异常

常见的异常有以下几个:

异常

解释

AttributeError

对象属性、方法等不正确或不存在

IndexError

元组/列表/字符串指定下标的元素不存在

IndentationError

缩进错误

KeyError

指定键不存在

NameError

指定名不存在

TabError

TAB和空格混用

TypeError

输入对象类型错误

ValueError

输入对象值不正确

那么我们在用try…except语句时,就可以在except:后面加上指定的异常,对其进行特殊处理

例如:

>>> def out(num):

try:

num = num*0.5

return num

except TypeError:

print('输入类型错误!')

>>> out(1)

0.5

>>> out([1,2,3])

输入类型错误!

或者我们可以在except后面接上多种错误类型:(仅举例用)

except (TypeError,AttributeError):

finally

finally语句往往写在except的后面:

>>> def out(num):

try:

num = num*0.5

return num

except TypeError:

print('输入类型错误!')

finally :

print('over')

finally语句的特点就是 无论是否发生异常,程序都将执行finally的内容

这种语句在什么时候可以用上呢?

比如:

一个软件安装程序,在运行后如果发现没有找到要安装的文件,则会报错,然后自己退出程序;当它找到要安装的文件后,安装完后,同样自动退出程序。

主动触发异常:raise

使用raise +异常名可以主动触发相应的异常

def out(num):

if num < 0:

raise ValueError('值小于0')

num = num*0.5

return num

print(out(6))

print(out(-1))

输出如图:

自定义异常:继承

首先我们要知道的是:Python的其他异常都是由“BaseException”这一个类继承来的,即BaseException是一个基类。

当现有异常不能满足我们的时候,我们可以自定义一个新的异常供我们使用。已有异常的名字都是xxxError,所以我们在自定义异常的时候,也应该以Error结尾,并且在继承的时候,要继承BaseException

class MyError(BaseException):

def __init__ (self,K):

self.A = K

def out(num):

if num == 6:

raise MyError('值不能是6!')

num = num*0.5

return num

print(out(6))

我们再看结果:

————————————————————————

今天就说这些吧,原本是想先说Python自带标准库的,但是今天时间太晚了,还有别的任务没有完成,就临时调整了一下:)这个系列已经到了第十六期了,以后的日子会越来越难的2333333,基础内容即将完结,再过几期可能就会开始增加难度了。

然鹅一切都是那么的巧合,刚才我算了下日子,再不开学的话估计是要做线上的测试,而本学期的第一个考试周即将来临,下一个考试周更是恰好又和web应用的部分基本重合,这就是缘分吗:)到了那时候我本人还是要以考试为重的,也许会停更一小段时间,毕竟要是挂了科就得不偿失了:_(

我是康.,希望能做一个帮助到各位的博主,在更新完Python系列后,根据时间安排会再开机器学习系列或者算法系列,欢迎感兴趣的小伙伴与我共同学习,一起进步!下期见!

原文链接:https://blog.csdn.net/k_ksy/article/details/105890473

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值