|
当python检测到一个错误时,解释器就无法继续运行了,反而出现了一些错误的提示,这就是所谓的异常。处理异常的方法就是用try语句来捕获异常避免程序终止。目录前言正文一、常见的报错类型 1、语法错误 2、逻辑错误 二、基本异常处理 1、基本语法: 2、多异常捕获 1)、多个except语句 2)、 使用元组同时匹配多个异常 3、万能异常Exception 三、进阶异常处理四、raise抛出异常拓展总结前言  ython中,程序执行过程中发生的错误或异常情况。当出现异常时,程序会停止执行并抛出一个异常对象,如果没有适当的处理机制,程序将会终止运行。为了避免直接停止程序,提高程序的容错性和可靠性,我们通常会使用try语句来处理异常。正文一、常见的报错类型 常见的报错分为两种: 1、语法错误 这种错误在代码编写阶段就能被检测到,因为它违反了Python的语法规则。常见的语法错误包括拼写错误、缩进错误、语法结构错误等。 2、逻辑错误 这种错误在代码运行时不会引发异常,但导致程序的行为与预期不符。逻辑错误通常是由于程序员的错误理解或错误的实现导致的。例如,算法错误、变量赋值错误、条件判断错误等。当出现错误时python解释器会抛出异常对象,并提示错误原因,以下是常见的异常信息与报错原因: 二、基本异常处理 1、基本语法:try:print("被检测的语句")except检测报错类型ase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)'运行运行 例如:输入两个整数进行除法运算try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptValueErrorase:#检测是否有ValueError错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('出现异常:',e)#捕获到异常则输出:出现异常:invalidliteralforint()withbase10:'1.2' 上述代码中如果输入的不是整数则会输出e捕获到的异常信息,如果输入的正确则正常执行代码。 即try对应的代码块里没有检测到异常,会跳过except继续执行后面的代码。 如果try对应的代码块中出现了异常则执行except语句,先和except后指定的异常类型进行匹配,匹配成功捕获到异常输出对应的代码块。匹配失败则不能捕获 2、多异常捕获 通常在代码中可能一段代码出现多种异常,这样我们则可以使用多异常捕获来进行 1)、多个except语句 类似于if-else语句会一个一个进行判断,如果匹配成功则执行对应的except中的语句,直到最后。try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptValueErrorase:#检测是否有类型错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('输入的不是整型')exceptZeroDivisionErrorase:#捕获除数为零的异常print('除数不能为零') 2)、 使用元组同时匹配多个异常try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)except(ValueError,ZeroDivisionError)ase:#检测是否出现元组中的错误如果有则执行except里面的语句#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print('出现异常:',e) 3、万能异常Exception 可以用于匹配大多数异常,如果是语法错误则捕获不到。try:num1=int(input('请输入整数:'))num2=int(input('请输入整数:'))print("num1/num2=",num1/num2)exceptExceptionase:#用于捕获大多数逻辑错误所引发的异常print('出现异常:',e)'运行运行 如以下输入于结果: 三、进阶异常处理try:print("被检测的语句")except检测报错类型ase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)else:print('没有捕获到异常执行')finally:#主要用于资源回收的作用,如在对文件进行操作时,不管有没有报错都对文件进行关闭的操作print('一定会执行的语句')'运行运行例代码:try:num1=int(input('请输入整数1:'))num2=int(input('请输入整数2:'))print('num1/num2=',num1/num2)exceptExceptionase:#as是把捕获到的异常赋值给变量e输出e得到具体的异常信息print(e)else:print('没有捕获到异常执行')finally:print('一定会执行的语句')'运行运行 运行结果:没有异常的结果:捕获到异常的结果:四、raise抛出异常 不符合python语法的由python解释器主动抛出异常 而raise则是由程序员,自定义规则来抛出异常 语法:#1、使用Exception创建异常对象e=Exception('自定义异常')#2、使用raise抛出异常raisee 运行结果:触发报错,报错信息为,自己创建的异常对象内容 但是抛出异常并不是为了让代码崩溃,而是为了拦截代码不符合预期的走向,所以常常于异常捕获一起使用,如:deffunc():num=input('请输入6-10位密码:')if6>len(num)orlen(num)>10:raiseException('密码位数错误')print('密码正确')try:func()exceptExceptionase:print('触发异常',e)'运行运行运行结果: 拓展 在python中for于while后面也是可以接else语句的。当else语句和循环链接,如果循环没有被break终止则会输出else里面的内容,否则不输出。没有被break终止代码:foriinrange(10):print(i,end='\t')else:print('\n循环已到最后')'运行运行 运行结果:被break终止:foriinrange(10):ifi==4:breakprint(i,end='\t')else:print('\n循环已到最后')'运行运行 运行结果: 总结 一个程序中出现报错,对于用户的体验是非常不好的,如果多使用异常处理则可以有效的避免这种情况,提高程序的容错性与可靠性。
|
|