第十六天学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系列后,根据时间安排会再开机器学习系列或者算法系列,欢迎感兴趣的小伙伴与我共同学习,一起进步!下期见!

原创文章 23 获赞 102 访问量 2679

猜你喜欢

转载自blog.csdn.net/k_ksy/article/details/105890473