欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十六天学Python:异常处理

程序员文章站 2024-01-20 09:41:10
...

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

前言

任何人都是从初学者过来的,任何人在写程序或调试程序的时候都经历过异常报错的情况:变量错误、语法错误、逻辑错误、操作错误等等等等。这些异常都是不可避免的。
所以,针对程序异常产生的种种问题,Python语言提供了一个完整的异常处理机制:当程序运行发生异常后,我们用特定的语句可以捕捉异常,并对其作出相应的处理:
第十六天学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:异常处理

自定义异常:继承

首先我们要知道的是: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:异常处理
————————————————————————
今天就说这些吧,原本是想先说Python自带标准库的,但是今天时间太晚了,还有别的任务没有完成,就临时调整了一下:)这个系列已经到了第十六期了,以后的日子会越来越难的2333333,基础内容即将完结,再过几期可能就会开始增加难度了。
然鹅一切都是那么的巧合,刚才我算了下日子,再不开学的话估计是要做线上的测试,而本学期的第一个考试周即将来临,下一个考试周更是恰好又和web应用的部分基本重合,这就是缘分吗:)到了那时候我本人还是要以考试为重的,也许会停更一小段时间,毕竟要是挂了科就得不偿失了:_(
我是康.,希望能做一个帮助到各位的博主,在更新完Python系列后,根据时间安排会再开机器学习系列或者算法系列,欢迎感兴趣的小伙伴与我共同学习,一起进步!下期见!

相关标签: Python python