
8.1 概念
程序中的错误通常包括两种,一种是语法或逻辑错误,另一种则是运行时的异常。
Python3版本的异常类型请参考:https://docs.python.org/3/library/exceptions.html。为了程序的健壮,代码要对可预知的异常进行处理。
8.2 处理异常
8.2.1 try...except
通常使用 try 和 except 来解决异常。
try:s = input('please enter two numbers separated by comma: ')num1 = int(s.split(',')[0].strip())num2 = int(s.split(',')[1].strip())...except ValueError as err:print('Value Error: {}'.format(err))
except 语句块只接受与它匹配的异常类型,如果程序抛出的异常与except 语句块声明的异常类型并不匹配,代码块不会被执行。比如上面的代码,只会处理ValueError异常,其他的异常则不处理。这里的处理其实就是打印了一下。
8.2.2 1个except中含多种异常
try:s = input('please enter two numbers separated by comma: ')num1 = int(s.split(',')[0].strip())num2 = int(s.split(',')[1].strip())...except (ValueError, IndexError) as err:print('Error: {}'.format(err))
8.2.3 多个except 语句块
try:s = input('please enter two numbers separated by comma: ')num1 = int(s.split(',')[0].strip())num2 = int(s.split(',')[1].strip())except ValueError as err:print('Value Error: {}'.format(err))except IndexError as err:print('Index Error: {}'.format(err))except Exception as err:print('Other error: {}'.format(err))
Exception 是其他所有非系统异常的基类,能够匹配任意非系统异常。用它来兜底前面except块都不匹配的异常。
8.2.4 try...except...finally
经常和 try、except 放在一起来用。无论发生什么情况,finally 语句块中的语句都会被执行,哪怕前面的 try 和 excep 语句块中使用了 return 语句。
import systry:f = open('file.txt', 'r')f.read()except OSError as err:print('OS error: {}'.format(err))finally:f.close()
8.2.5 try...except...else...finally
当try语句块中没有异常发生时,执行else子句。
try:...except XXXError as err:...else:...finally:...
8.3 抛出异常
大部分情况下,Python自动抛出异常,我们自己定义的函数遇到异常时,也可以手动抛出异常给调用者。手动抛异常时raise语句,后面接上异常类和异常描述信息。例如:
if index>100:raise IndexError("索引错误")
8.4 应用场景
在IO读写操作时,往往需要加上IOError异常的处理。
文件读写
网络连接
数据库链接
文章转载自明说软件测试,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




