python异常处理学习笔记
'''
异常类型:
1.NameError..............未定义变量
2.ZeroDivisionError......除数为零
3.SyntaxError............语法错误
4.IndexError.............访问不存在序列
5.KeyError...............访问不存在键值
6.FileNotFoundError......试图打开不存在文件
7.AttributeError.........访问不存在对象属性
捕获简单异常:
try:
语句块1
except:
语句块2
若语句块1出现错误则进行语句块2
捕获多个异常:
try:
语句1
except 异常名称1:
语句2
except 异常名称2:
语句3
若语句1出现异常1则运行异常1代码,若语句1出现异常2则运行异常2代码
捕获异常描述信息:
try:
语句块1
except (异常名称1,异常名称2,..):
语句块2
若语句块1出现错误则进行语句块2
捕获所有异常:
try:
语句1
except Exception as result:
print(" 出现异常:%s"%result)
(Exception类表示所有异常)
没有捕获到异常:
try:
语句1
except:
语句2
else:
语句3
若语句1没有异常则执行完语句1后执行语句3
终止行为:
try:
语句1
except:
语句2
finally:
语句3
不管语句1是否错误都执行语句3(finally强制执行)
异常处理完整语句:
try:
语句1
except A:
异常A处理代码
except:
其他异常处理代码
else:
没有异常处理代码
finally:
强制最后执行代码
抛出异常(人为制造异常):
raise 异常类 引发异常时会隐式地创建类对象
raise 异常类对象 引发异常类对象对应异常
raise 重新引发刚刚发生的异常
raise 异常类("自定义描述信息")引发异常的同时输出异常信息
except Exception as result:
raise 异常类 from exception异常中抛出异常
assert语句:
assert 逻辑表达式,data data可选
=
if not 逻辑表达式:
raise AssertionError(data)
自定义异常:
class ShortInputException(Exception) 创建一个继承Exception的类ShortInputException
预定义清理:
with语句(不管是否出现异常都会执行完with语句);
with 上下文表达式 [as 资源对象]:
对象操作
上下文管理器:
1.上下文管理协议:
包含_enter_()和_exit_()方法
_enter_(self):进入上下文表达式,将返回值放入as后的变量中
_exit_(self,type,value,tb):离开上下文表达式,如果有异常,type为异常类型,value为异常的值,tb为异常的追踪信息
如果没有异常,三个参数都为None,此方法返回值为True或False,分别指示引发的异常是
否得到了解决如果返回False引发的异常会传递出上下文
2.上下文管理器:
支持上下文管理协议的对象,用于实现_enter_和_exit_方法.上下文管理器定义执行with语句时要建立的运行的上下文,
负责执行with语句块上下文中的进入和退出操作.
3.运行时上下文:
由上下文管理器创建,通过上下文管理器的两个方法实现
4.上下文表达式:
with语句中在关键字with之后的表达式,该表达式要返回一个支持上下文管理协议的对象.
异常处理小结:
围绕python的异常,进行了异常的捕捉,处理,抛出,定义和预定义清理
'''
# try:
# text=int(input("输入:"))
# print(13/text)
# except NameError:
# print("有变量未定义")
# except (ZeroDivisionError,ValueError):
# print("除数不正确")
# except Exception as result:
# print(" 出现异常:%s"%result)
# else:
# print("程序没有错误")
# finally:
# print("程序结束")
# try:
# raise ZeroDivisionError("除数不能为零")
# except Exception as result:
# raise ZeroDivisionError("除数不能为零") from Exception
# a=0;
# assert a!=0,"a不能为零"
# class ShortInputException(Exception):
# def __init__(self,length,atleast):
# self.length=length
# self.atleast=atleast
# try:
# text=input("请输入密码:")
# if(len(text))<3:
# raise ShortInputException(len(text),3)
# except EOFError:
# print("你输入了一个结束标记")
# except ShortInputException as result:
# print("ShortInputException:输入长度是%d,长度至少为%d"%(result.length,result.atleast))
# else:
# print("没有发生异常")