10.错误和异常

10.1 错误

错误说明
NameError:尝试访问一个未申明的变量
ZeroDivisionError:除数为零
SyntaxError:Python 解释器语法错误
IndexError:请求的索引超出序列范围
KeyError:请求一个不存在的字典关键字
IOError:输入/输出错误
AttributeError:尝试访问未知的对象属性
TypeError:类型不正确
ValueError:值的错误
AssertionError:断言异常

其他异常参考官网文档Built-in Exceptions

10.2 检测和处理异常

  1. 任何在 try 语句块里的代码都会被监测
  2. try-except 和 try-finally
  3. 一个 try 语句可以对应一个或多个 except 子句, 但只能对应一个finally 子句, 或是一个 try-except-finally 复合语句
  4. 而 try-finally 只允许检测异常并做一些必要的清除工作


    处理多个异常示例1
try:
    statement
except Exception1, reason:
    statement
except Exception2, reason:
    statement


处理多个异常示例2

try:
    statement
except (Exception1,Exception2), reason:
    statement

处理所有异常

try:
    statement
except Exception, reason:
    statement

或者使用BaseException替代Exception
reason是异常类的实例,可以省略,也可以有用户指定错误信息给它。

5. 异常检查逻辑中可以添加else分支。当异常未发生时执行。
6. finally 子句是无论异常是否发生,是否捕捉都会执行的一段代码

10.3 异常代码逻辑模板

try:
    try_suite
except Exception1:
    suite_for_Exception1
except (Exception2, Exception3, Exception4):
    suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
    suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
    suite_for_Exceptions6_and_7_plus_argument
except:
    suite_for_all_other_exceptions
else:
    no_exceptions_detected_suite
finally:
    always_execute_suite


10.4 with

with在支持上下文管理的模块中使用
file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore

_ _context_ _()
_ _enter()_ _
_ _exit_ _()
可选contextlib 模块


10.5 触发异常

raise [SomeException [, args [, traceback]]]
参数说明备注
SomeExcpetion触发异常的名字,合法的异常字符串,类或实例必填
args传给异常.对象或对象的元组可选
tracebackNone可选



通过实例触发异常

raise instance 
raise instance.__class__, instance


10.6 断言

测试一个表达式,如果返回值是假,触发异常.

assert expression[, arguments]


10.7 sys.exc_info()

返回三元组
1. exc_type: 异常类
2. exc_value: 异常类的实例
3. exc_traceback: 追踪(traceback)对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值