广义上的异常分为错误和异常。可以人为地避免错误。异常是指在语法和逻辑正确的前提下出现的问题。在python中,异常是一个可以处理和使用异常分类的类。BaseExceptionAll异常的基类Exception常见错误的基类ArithmeticError所有数值计算错误的基类Warning警告的基类AssertError断言语句(assert)失败AttributeError试图访问未知对象属性DeprecattionWarning关于弃用特性的警告EOFError用户输入文件结束标记EOF(Ctrl+d)FloatingPointError浮点计算错误FutureWarning构造未来语义的警告不存在的关键字KeyboardInterrupt用户输入中断键(Ctrl+c)MemoryError内存溢出(删除对象可以释放内存)NamerError尝试访问a不存在的变量NotImplementedError尚未实现的方法OSError操作系统产生的异常(例如打开一个不存在的文件)rning关于特征被放弃的警告ReferenceError弱引用(weakreference)试图访问已被垃圾回收的资源TabErrorTabError空格混合使用SystemErrorPython编译器系统错误SystemExitPython编译器进程关闭TypeErrorNone不同类型之间无效操作UnboundLocalError访问未初始化的局部变量(NameError的子类)UnicodeErrorUnicode相关错误(ValueError的子类)UnicodeEncodeErrorUnicode编码错误(UnicodeError的子类)UnicodeDecodeErrorUnicode解码错误(UnicodeError的子类)UserWarning用户代码产生的警告ValueError参数无效传入ZeroDivisionErrorThedivisoriszerol=[1,2,3,4,5]#除以零错误num=int(input("Pleaseinputyournum:"))print(100/num)Pleaseinputyournum:0--------------------------------------------------------------------------ZeroDivisionErrorTraceback(最近调用最后)in2#除零错误3num=int(input("Pleaseinputyournum:"))---->4print(100/num)ZeroDivisionError:除零异常处理不能保证程序始终正确运行但是,它是确保程序在最坏的情况下遇到的问题是必要的ase管理得很好ThrowtheexceptionoutofthecurrentblockofcodeAttempttoresolvetheexceptionexceptExceptionType1:解决方案一:对于这里尝试处理异常,解决exceptExceptionType2的问题:解决方案二:对于尝试处理这里的exception解决except(exceptiontype1,exceptiontype2...)问题:这里的代码最后会执行:是否有异常必须执行的代码流程执行下面的语句else语句的最后,不管是否发生异常,finally语句都必须执行exceptexcept(至少一个),else和finally是可选的#简单异常情况try:num=int(input("请输入yournumber:"))rst=100/numprint("Thecalculationresultis:{}".format(rst))except:print("inputerror")#exit表示退出程序exit()请输入你的number:0inputerror#简单的异常情况#给出提示信息try:num=int(input("请输入你的数字:"))rst=100/numprint("计算结果为:{}".format(rst))#捕获到异常后,实例化异常,错误信息会在例子中#注意to下面的写法#下面的语句是捕获ZeroDivisionError异常,实例化eexceptZeroDivisionErrorase:print("Inputerror")print(e)#exit表示退出程序exit()#简单的异常情况#给出提示messagetry:num=int(input("Pleaseinputyournumber:"))rst=100/numprint("Calculationresultis:{}".format(rst))#如果有多个错误#更具体的错误需要往前放#在异常类的继承关系中,子类异常越多越往前放,#父类异常越多越往后放#在处理异常的时候,一旦异常被拦截,不要继续往下看,直接进行下一段#代码,即有finally则执行finally语句,否则执行除ZeroDivisionError之外的下一条大语句ase:print("输入错误")print(e)#exit是退出程序的含义exit()exceptNameErrorase:print("名称错误")print(e)exceptAttributeErrorase:print("属性错误")print(e)exit()#的基类commonerrors#如果写下面这句,commonexception会被拦截#而且下面这句一定是最后一个exceptionexceptExceptionase:print("我不知道哪里出了问题")print(e)exceptValueErrorase:print("NO>>>>>>>>>>")print("hahaha")Pleaseinputyournumber:ffff我不知道,所以我犯了一个错误invalidliteralforint()withbase10:'ffff'haha??hausermanual抛出异常在某些情况下,用户想自己抛出异常,可以使用raise关键字来抛出异常#raisecasetry:print("Iloveyou")print(3.1415926)#手动引发异常#注意语法:raiseErrorClassNameraiseValueErrorprint("It'snotover")exceptNameErrorase:print("NameError")exceptValueErrorase:print("ValueError")exceptExceptionase:print("有异常")finally:print("我一定会被执行")我爱你3.1415926ValueError我一定会被执行#raisecase-2#自定义异常#注意:自定义异常必须是子类系统异常类DanaValueError(ValueError):passtry:print("Iloveyou")print(3.1415926)#手动引发异常#注意语法:raiseErrorClassNameraiseDanaValueErrorprint("It'snotover")exceptNameErrorase:print("NameError")#exceptDanaValueErrorase:#print("DanaError")exceptValueErrorase:print("ValueError")exceptExceptionase:print("有异常")finally:print("我一定会被执行")我爱你3.1415926ValueError我肯定会被执行#else语句casetry:num=int(input("请inputyournumber:"))rst=100/numprint("计算结果为:{}".format(rst))exceptExceptionase:print("Exception")else:print("NoException")finally:print("Anyway,Iwillbeexecution")Pleaseinputyournumber:0ExceptionAnyway,Iwillbeexecution.请输入你的号码:0Exception不管怎样,我都会被处决关于自定义异常,只要是raise异常,都推荐自定义异常。自定义异常时,一般包括以下内容:自定义事件异常的异常代码是自定义异常发生后的问题提示。自定义异常发生行数的最终目的是为了方便程序员在异常发生时快速定位到错误部位。