异常处理的几种方式
try...except try 子句中的代码块包含可能会引发异常的语句
而except子句则用来捕捉相应的异常
如果try子句中的代码引发异常并被except子句捕捉,就执行except子句的代码块
没有出现异常就继续往 下执行异常处理结构后面的代码
如果出现异常但没有被except捕获,继续往外层抛出
如果所有层都没有捕获并处理该异常,程序崩溃 并将该异常呈现给最终用户
try...except...else 或 try...finally 如果try中的代码没有引发异常,则执行else块的代码
无论try中的代码是否发生异常,也不管抛出的异常有没有被except语句捕获,finally子句中的代码总是会得到执行
自定义异常
可以通过raise语句显式地引发异常(类似JAVA中的throw) 自定义的异常类要继承所有异常的父类
(Exception) raise 抛出的是一个异常的实例化对象
断言(Assert)
对代码运行中的结果进行事先判断,不满足时,抛出异常,方便调试。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况
仅在\__debug__为True有效
使用方法: assert \< expression > [ , arguments]
当判断表达式expression为真时,什么都不做;如果表达式为假,则抛出异常(显示arguments内容)
等同于: if not \< expression > : raise AssertionError( [arguments] )
上下文管理: with语句
with语句保证with语句结束时,还原with语句执行时的现场
无论是否发生异常 自动管理资源,可以在代码块执行完毕后自动还原现场
常用在文件管理、数据库连接、网络连接、多线 程、多进程同步等场合,总能保证文件被正确关闭
使用方法: with context_expr [ as var ]
unittest单元测试库
软件测试:软件质量保障的有效措施,尤其在软件升级、代码重构等过程中,应保障不影响原来的用法
常用的软件测试方法:白盒测试、黑盒测试
白盒测试:主要通过阅读程序源代码判断是否符合功能要求
黑盒测试:不关心模块的内部实现方式,只关心其功能是否正确
即通过设计一些测试用例来检验模块的输 入和输出是否正确,最终判断是否符合预定的功能要求
unittest单元测试库:提供大量用于单元测试的类和方法