摘要:作为Python初学者,初学Python编程时,经常会看到一些错误信息。这篇文章专门介绍了python的异常处理。广义上的异常分为错误和异常。可以人为地避免错误。异常是指在语法和逻辑正确的前提下出现的问题。在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...)问题:解决方法:对多个异常使用相同的处理方法,除了:如果没有异常,最后会执行这里的代码:如果没有异常,执行代码流程执行下面的语句try如果有异常,在except语句中找到对应的异常并处理如果没有异常,executeelse语句的内容在最后,不管有没有异常,finally语句都要执行exceptexcept(至少一个),else和finally是可选的#简单异常情况try:num=int(input("Pleaseinputyournumber:"))rst=100/numprint("计算结果为:{}".format(rst))except:print("Inputerror")#exit表示退出程序exit()Pleaseinputyournumber:0Inputerror#SimpleexceptionCase#给出提示信息try:num=int(input("Pleaseinputyournumber:"))rst=100/numprint("计算结果为:{}".format(rst))#捕捉到异常后,把异常实例化,错误信息会在例子中#不是e下面的写法#下面的语句是捕获ZeroDivisionError异常,实例化eexceptZeroDivisionErrorase:print("Inputerror")print(e)#exit表示退出程序exit()#简单的异常情况#给提示信息try:num=int(input("Pleaseinputyournumber:"))rst=100/numprint("Thecalculationresultis:{}".format(rst))#如果是多次错误的情况#越具体的错误需要提出#在异常类的继承关系中,子类异常越多越要提出,#父类异常越多越要提出,#处理时异常,一旦拦截到某个异常,就不会继续往下看,直接进行下一段#代码,即有finally则执行finally语句,否则执行除ZeroDivisionError之外的下一条大语句ase:print("输入错误")print(e)#exit表示退出程序exit()exceptNameErrorase:print("名称错误")print(e)exceptAttributeErrorase:print("属性错误")print(e)exit()#普通错误的基类#如果写下面这句话,普通异常会被拦截#而且下面这句话一定是最后一个exceptionexceptExceptionase:print("我犯了一个错误,自己都不知道")print(e)exceptValueErrorase:print("NO>>>>>>>>>>")print("hahaha")Pleaseinputyournumber:ffff我不知道,我犯了一个错误invalidliteralforint()withbase10:'ffff'haha??ha用户手动抛出异常在某些情况下,当用户想自己抛出异常时,可以使用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("Pleaseinputyournumber:"))rst=100/numprint("计算结果为:{}".format(rst))exceptExceptionase:print("Exception")else:print("NoException")finally:print("Anyway,Iwillbeexecution")Pleaseinputyournumber:0Exception无论如何,我都会被执行。关于自定义异常,只要是raise异常,都推荐自定义异常。自定义异常时,一般包括以下内容:自定义异常发生时的异常代码。自定义异常发生后的问题提示。自定义发生异常的行数。最终的目的是为了方便程序员一旦出现异常就可以快速定位到错误部位。,原文作者:若晨点击关注,第一时间了解华为云的新鲜技术~