python-异常

一、错误

从软件方面来说, 错误是语法或是逻辑上的。语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。

当程序的语法正确后, 剩下的就是逻辑错误了。逻辑错误可能是由于不完整或是不合法的输入所致;在其他情况下, 还可能是逻辑无法生成,计算,或是输出结果需要的过程无法执行。这些错误通常分别被称为域错误和范围错误。

二、异常

程序出现了错误而在正常控制流以外采取的行为。这个行为又分为两个阶段: 首先是引起异常发生的错误,然后是检测(和采取可能的措施)阶段。

第一个阶段是在发生了一个异常条件(有时候也叫做例外的条件)后发生的。只要检测到错误并且意识到异常条件, 解释器会引发一个异常。当前流将被打断, 用来处理这个错误并采取相应的操作。

对异常的处理发生在第二阶段,异常引发后, 可以调用很多不同的操作。可以是忽略错误(记录错误但不采取任何措施,采取补救措施后终止程序),或是减轻问题的影响后设法继续执行程序,所有的这些操作都代表一种继续,或是控制的分支。

三、检测和处理异常

异常可以通过 try 语句来检测。任何在 try 语句块里的代码都会被监测,检查有无异常发生。

try 语句有两种主要形式:try-except 和 try-finally,这两个语句是互斥的,一个 try 语句可以对应一个或多个 except 子句,但只能对应一个finally 子句,或是一个 try-except-finally 复合语句。

1、try-except 语句
它 由 try 块 和 except 块 (try_suite 和except_suite )组成,也可以有一个可选的错误原因
try:
          try_suite # watch for exceptions here 监控这里的异常
except Exception[, reason]:
          except_suite # exception-handling code 异常处理代码

2、封装内建函数
我们的目标是"安全地"调用 float() 函数,或是使用一个"安全的方式" 忽略掉错误,因为它们与我们转换数值类型的目标没有任何联系,而且这些错误也没有严重到要让解释器终止执行。

def safe_float(obj):
    try:
        retval = float(obj)
    except ValueError:
        retval = 'could not convert non-number to float'
    except TypeError:
        retval = 'object type cannot be converted to float'
    return retval

3、带有多个 except 的 try 语句

 该种异常处理语法的规则是:

  ·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

  ·   如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

  ·   如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

  ·   如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

  ·   如果没有发生异常,则执行else块代码。

我们还可以在一个 except 子句里处理多个异常

def safe_float(obj):
    try:
        retval = float(obj)
    except (ValueError, TypeError):
        retval = 'argument must be a number or numeric string'
    return retval

4、捕获所有异常

try:
       :
except Exception as e:
        print('reason:',e)

5、异常参数

异常也可以有参数,异常引发后它会被传递给异常处理器,当异常被引发后参数是作为附加帮助信息传递给异常处理器的,要想访问提供的异常原因,你必须保留一个变量来保存这个参数。
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值