python如何抛出typeerror异常_python-异常

7a88107ebbf442b3f40c82e5bc77077a.png

defc08114ea5a26070e80c537c6f2722.png

除零异常   ZeroDivisionError

名称异常    NameError

类型异常    TypeError

索引异常    IndexError

键异常       KeyError

值异常      ValueError

属性异常   AttributeError

迭代器异常   StopIteration

错误信息的获取:

fac2cd133d5ac0201cea921faca3c020.png

错误信息中最后一行的第一个单词

异常处理方案一

捕获所有错误:

try:

num=int(input('请输入整数:'))  #容易出错的代码

except:

print('你输入错误')         #出错后,进行处理的代码

根据错误类型进行捕获:

try:

num=int(input('请输入整数:'))  #容易出错的代码

num = 8/num

except ValueError :

print('请输入正确的整数')         #出错后,进行处理的代码

except ZeroDivisionError :

print('除0错误')

说明:except后面是错误信息,可以有多个

多种异常一起处理:

try:#s=1/0

print(name)except(ZeroDivisionError,NameError): #同时捕获不同异常print('除0异常或名称异常')

捕获未知错误:

try:

num=int(input('请输入整数:'))  #容易出错的代码

num = 8/num

except ValueError :

print('请输入正确的整数')         #出错后,进行处理的代码

except Exception as cuowuxinxi:

print('错误信息:%s'%cuowuxinxi)

说明:cuowuxinxi保存返回的错误信息,这个错误信息和错误类型不一样

这个应该在所有预测到的错误类型之后

异常捕获的完整语法:

9bffa824b28b804bf41efa59beeb02a0.png

finally与return相遇时,先执行finally再return

异常处理方案二

with open('1.png','r') as f:#会自动执行__enter__方法,把返回的文件对象赋值给f

#不管下面的代码是否出现异常,都会执行__exit__即自动退出文件

f.readline()

自定义上下文管理器:

class Test:

def __enter__(self):

print('enter')

return self

def __exit__(self, exc_type, exc_val, exc_tb):

print('exit:')

print(self, exc_type, exc_val, exc_tb)

with Test() as x:

print('body',x)

执行以上代码时的结果是:

80eebfbe38038042bdc41a838297c90e.png

enter    --->先执行预处理函数__enter__

body <__main__.test object at>  --->执行代码,x是__enter__函数的返回值

exit:     --->最后执行退出函数

<__main__.test object at> None None None

class Test:

def __enter__(self):

print('enter')

return self

def __exit__(self, exc_type, exc_val, exc_tb):

print('exit:')

print(exc_type, ',',exc_val,',', exc_tb)

return True #返回True不会再抛出异常信息

with Test() as x:

print('body')

1/0 #产生异常,把异常信息传给__exit__函数

显示结果:

f8be388088ef05a727e3ce4b9a097f29.png

exc_type--->异常类型

exc_val--->异常值

exc_tb--->追踪信息

classTest:def __enter__(self):print('enter')returnselfdef __exit__(self, exc_type, exc_val, exc_tb):print('exit:')print(exc_type, ',',exc_val,',', exc_tb)importtracebackprint(traceback.extract_tb(exc_tb)) #打印追踪信息

#[>]

returnTrue

with Test() as x:print('body')1/0

人为抛出异常raise:

defa(age):if age<0 or age>120:#print('年龄值错误')

raise ValueError('年龄值错误')#ValueError 是异常类型

#参数 提示信息。except ValueError as x,这个参数会赋值给x

else:print('张三的年龄是',age)

a(-18)

自定义异常类型:

c02b03d43b97156f0234d192adb13fa8.png

7f4256b890c0076d246b8884a42ecd2d.png

class lesszero(Exception):#自定义异常类,继承与Exception

def __init__(self,msg):

self.msg=msgdef __str__(self):returnself.msgdefa(age):if age<0 or age>120:raise lesszero('年龄值错误') #抛出自定义异常类-执行异常类

#参数传给msg

else:print('张三的年龄是',age)try:

a(-18)except lesszero as x: #x就是__str__返回的值

print('异常被处理',x) #异常被处理 年龄值错误

天子骄龙


版权声明:本文为weixin_31022063原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。