对于每一种高级语言来说,异常处理结构不仅能够提高代码的鲁棒性,而且 提高了代码的容错性,从而不会因为使用者的错误输入而造成系统崩溃,也可以 通过异常处理结构为使用者提供更加友好的错误提示。引发程序异常的原因有很 多种,较为常见的有除0 、下标越界等。
Python中提供了很多不同形式的异常处理结构,其基本思路都是先尝试执行 代码,再处理可能发生的错误。
1.try …except … 结构
在Python异常处理结构中,try …except … 结构使用得最为频繁,其中try子句 中的代码块为可能引发异常的语句,except子句用来捕获相应的异常。也可以解 释为,当try子句代码块执行异常并且被except子句捕获时,执行except子句的代码 块。
例如,在使用学校的学生成绩系统录入每科成绩时,要求输入0~100的整型 数值,而不接受其他类型的数值,如果输入的值超出0~100这一范围,则会给出 提示,示例代码如下:
#!/usr/bin/python #coding:utf-8 mathScore = input( '数学成绩: ') try: mathScore = in t(mathScore) if(0<=mathScore<=100) : print("输入的数学成绩为:",mathScore) else: print("输入不在本科成绩范围内。") except Exception as e: print( '输入的数值有误! ') |
输出结果: |
数学成绩: 'a ',输入的数值有误! 数学成绩:121,输入不在本科成绩范围内。 |
2.try …except …else … 结构
100范围中的,也可以通过try …except …else … 结构进行编写。如果try代码的子 句出现了异常且该异常被except捕获,则可以执行相应的异常处理代码,此时就 不会执行else中的子句;如果try中的代码没有抛出异常,则继续执行else子句。
例如,将前面的示例用try …expect …else … 结构实现:
#!/usr/bin/python #coding:utf-8 mathScore = input( '数学成绩: ') try: mathScore = in t(mathScore) except Exception as e: print( '输入的数值有误! ') else: if(0<=mathScore<=100) : print( '输入的数学成绩为: ',mathScore) else: print( '请输入正确的数学成绩。 ') |
输出结果:
|
数学成绩: 'a ',输入的数值有误! 数学成绩:121,请输入正确的数学成绩。 |
3.try …except …finally … 结构 在try …except …finally … 结构中,无论try子句是否正常执行,finally子句中的 代码块总会得到执行。在日常开发过程中,该结构通常用来做清理工作,释放try 子句中申请的资源。 例如,输入两个数值a ,b进行除法运算,并输出最终结果。同时为了确保程 序的鲁棒性,要求带有异常处理结构。鲁棒是指系统的健壮性,是在存在异常和 危险的情况下系统生存的关键,这个结构示例如下: |
#!/usr/bin/python #coding:utf-8 a = in t(input( 'a: ')) b = in t(input( 'b: ')) try: div = a/b print(div) except Exception as e: print( 'The second parameter cannot be 0 . ') finally: print( '运行结束! ') |
输出结果: |
a:1 .0 b:2 .0 0 .5 |