Python异常处理try except else finally

异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的超出程序正常执行流程的异常状况。异常(Exception)这一术语所描述的通常是一种数据结构,可以存储与某种异常状况相关的信息。

抛出是用来移交控制权的机制,抛出异常也可以称作引发异常。抛出异常后,控制权会查找对应的捕获机制并做进一步处理。错误(Error)则常用来表示系统级错误或底层资源错误。在 Python 中,二者具有相同的处理机制。编程过程中,通常很难将所有的异常状况都处理得很好,通过异常捕获可以针对突发事件做集中处理,从而保证程序的稳定性和健壮性。

在 Python 中使用 try…except…else…finally… 语句检查可能发生异常的代码、捕获异常并做进一步处理,其语法如下:

try:
#尝试执行的代码
[except 错误类型1 :
#针对错误类型1,对应的代码处理]
[except 错误类型2 :
#针对错误类型2,对应的代码处理]
[except (错误类型3,错误类型4):
#针对错误类型3和4,对应的代码处理]
[except Exception as result:
#打印错误信息]
[else:
#没有异常才会执行的代码]
[finally:
#无论是否有异常,都会执行的代码]

例如以下代码尝试执行除法操作:

try:
    num = int(input("请输入一个整数: "))
    result = 5 / num
    print(result)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除 0 错误")
except Exception as result:
    print("未知错误 %s" % result)
else :
    print("正常执行")
finally:
    print("执行完成")

当用户输入 0 时,上述代码的运行结果如下所示:

>>> try:
…       num = int(input("请输入一个整数: "))
…       result = 5 / num
…       print(result)
…   except ValueError:
…        print("请输入正确的整数")
…   except ZeroDivisionError:
…        print("除 0 错误")
…   except Exception as result:
…        print("未知错误 %s" % result)
…   else :
…        print("正常执行")
…   finally:
…        print("执行完成")
   
请输入一个整数: 0
除 0 错误
执行完成

当用户输入字母 a 时,上述代码的运行结果如下所示:

>>> try:
…       num = int(input("请输入一个整数: "))
…       result = 5 / num
…       print(result)
…   except ValueError:
…        print("请输入正确的整数")
…   except ZeroDivisionError:
…        print("除 0 错误")
…   except Exception as result:
…        print("未知错误 %s" % result)
…   else :
…        print("正常执行")
…   finally:
…        print("执行完成")
   
请输入一个整数: a
请输入正确的整数
执行完成

可以看到,程序根据用户的不同输入执行了不同的异常处理分支代码块,并在最后执行了 finally 代码块。通常来说,当函数或方法执行出现异常时,异常将被传递给函数或方法的调用方,若逐级传递到主程序,仍然没有对应的异常处理代码块,程序才会最终被终止。因此可以在主函数中适当增加异常捕获代码。

除了代码执行自动抛出异常外,编程者还可以根据程序业务功能需求,人为地抛出异常,这种情况下可以使用 raise 语句,例如:

try:
     raise Exception
except Exception:
    print("This is an Exception")

上述代码的运行结果如下所示:

>>> try:
…          raise Exception
…      except Exception:
…          print("This is an Exception")

This is an Exception

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23755.html

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论