10000小时 发表于 2018-4-22 07:52:26

python-异常处理


1,异常就是程序运行错误时发出的信号在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止
2.异常的种类:    1.语法异常:      这类异常应该在程序执行前改正,如忘写分号,括号等print('start....'    2.逻辑异常:      异常处理主要处理逻辑异常
3.一个异常分为三部分    1.异常的追踪信息    2.异常的类型    3.异常的值
    例:      Traceback (most recent call last):          File"D:/Python/课程讲解/day24/异常处理.py", line 21, in <module>            asd      NameError: name 'asd' is not defined
#Traceback ===>异常的追踪信息#NameError===>异常的类型#name 'asd' is notdefined ====>异常的值

常见的异常类型:    AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x    IOError 输入/输出异常;基本上是无法打开文件    ImportError 无法引入模块或包;基本上是路径问题或名称错误    IndentationError 语法错误(的子类) ;代码没有正确对齐    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x    KeyError 试图访问字典里不存在的键    KeyboardInterrupt Ctrl+C被按下    NameError 使用一个还未被赋予对象的变量    SyntaxErrorPython代码非法,代码不能编译(个人认为这是语法错误,写错了)    TypeError 传入对象类型与要求的不符合    UnboundLocalError试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,    导致你以为正在访问它    ValueError 传入一个调用者不期望的值,即使值的类型是正确的


'''#异常处理的语法:try只是监测代码块,当有异常发生时,跳到except中判断是否有对应的异常类型;    有则运行对应的异常处理逻辑,没有则抛出异常,结束程序;和if判断类似运行完处理逻辑后,不会跳回try的代码块,接着执行后面的代码

#单分支try:    #代码except 异常类型    #异常处理逻辑except 异常类型    #异常处理逻辑except 异常类型    #异常处理逻辑
#异常合并try:    #代码except (异常类型,异常类型,....)    #异常处理逻辑
#万能异常处理;一般那放在最后,类似于if中的elseexcept Exception    #异常处理逻辑
#处理异常的值
#as ,将异常的值赋值给变量except 异常类型 as 变量名    print(变量名)
try....except ..else:....在被监测的代码块没有出现异常,会执行else中的代码
try:    #代码except 异常类型    #异常处理逻辑else:    #代码    try中没有出现异常是会执行

try:...except...finally....被监测代码无论有没有异常,都会执行finally中的代码finally中可以执行一些回收系统资源的代码,避免程序异常结束而没有释放调用的系统资源


书写顺序:try:...except....else.....finally....

#主动触发异常raise 异常类型(异常的值)
raiseTypeError("异常的值")

#断言assert 条件只有值大于0时,在执行后续代码,否则就抛出异常,结束程序


#自定义异常
BaseException异常类型的父类

class异常类名(BaseException):    def __init__(self,msg,user):      self.msg=msg      self.user=user    def __str__(self):      return"<%s:%s>"%(self.msg,self.user)
raise异常类名("注册失败","teacher")raise相当于print打印,会触发类中__str__()方法

'''
try:    x=1    y    print(y)    l=[]    # lexcept NameError as a:    print(a)except Exception as a:    print(a)else:    print("没有错误")finally:    print("无论有没有错误都会执行")


#主动触发异常# raiseNameError("异常的值")#===>NameError: 异常的值
# 断言
assert 3print("qqq")#===>qqqassert 1==1print("qqq")#===>qqqassert 1==2print("qqq")#===>AssertionError
##自定义异常classRegisterError(BaseException):    def __init__(self,msg,user):      self.msg=msg      self.user=user    def __str__(self):      return"<%s:%s>"%(self.msg,self.user)
raiseRegisterError("注册失败","teacher")#===>__main__.RegisterError:<注册失败:teacher># raise相当于print打印,会触发类中__str__()方法






页: [1]
查看完整版本: python-异常处理