Python 错误机制和异常

错误处理,异常机制

理想的书籍是智慧的钥匙 –列夫.托尔斯泰

异常的概念

有的时候我们在程序运行阶段会发生各种错误,无法在编码阶段预知它们是否会发生.但是我们可以提前预知一下 在代码中对潜在错误做出处理,以避免对程序运行造成破坏性的影响

异常的捕获

try-except 异常捕获

  • 异常的捕获可以使用 try-except 语句
try:
  代码块1
except:
  代码块2

执行顺序是,从 try 下的代码块 1 开始执行,若其中有异常抛出,那么异常将会被捕获,直接跳转并执行 except 下面的代码块 2 若代码块 1 一切正常,并没有异常抛出,那么代码块 2 将不会被执行

也就是代码块 1 是我们正常运行的代码,而代码块 2 则是当发生错误时用于处理错误的代码

来看一个使用 try-except 的例子


try:
  fruit = ['apple','banana']
  print(fruit[2])
except:
  print("列表索引越界了")

捕获指定的异常

之前我们没有直接指定要捕获的异常类型,所以所有类型的异常都会被捕获

我们也可以显式的指定要捕获的异常种类


try:
  代码块1
except 异常x as e:
  代码块2

和第一个区别的就是多出了异常 x as e 这一部分。异常 X 是指定要捕获的异常名,比如 NameError,indexError 等等 as e 语句是将异常对象赋予变量 e.这样 e 就可以在代码块 2 中使用了,如获取错误信息

  • 捕获指定异常得例子

try:
 arr = ['apple','banana']
 print(arr[2])
except IndexError as e:
  print('出现越界得错误',e)

这里我们显式得指定要捕获 IndexError 异常,并且将异常中的错误信息输出信息

显式指定异常时,只有被指定的异常会被捕获,其余异常会被忽略


try:
 代码块1
except(异常x,异常y,异常z) as e :
 代码块2

try-except-finally

在之前介绍的 try-except 之后还可以跟 finally 语句


try:
  代码块1
except 异常x as e:
  代码块2
finally:
  代码块3

它得执行流程是

  • 首先执行代码块 1

  • 若发生异常则执行代码块 2,否则跳过代码块 2

  • 无论是否发生异常都执行代码块 3

也就是在 try-except 得基础上,紧接着执行 finally 下的代码块,且 finally 下的代码必定执行

finally 有什么用 .举个例子 我们有时会在 try 下使用一些资源,比如(文件,网络链接),而无论过程中是否有异常我们都需要释放掉这些资源,这时可以将释放资源得代码放到 finally 语句下

  • 常见得异常类型
异常名 含义
Exception 大多数异常得基类
SyntaxErroe 无效语法
NameError 名字(变量,函数,类等) 不存在

raise 主动抛出异常

  • 主动抛出异常用 raise 语句

raise ValueError()

# 或者可以指明原因

raise ValueError('输入值不符合要求')
  • 举例

def age_life(age):
    if age<0:
      raise ValueError("年龄不符合")

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录