这里主要讨论在python中,遇到异常时处理。
1、try…except
首先,执行 try 子句 ,如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。
我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。注意:每一个try,都必须至少有一个except。
2、raise 引发一个异常
使用 raise 语句抛出一个异常,举例:实现一个函数 Hours( ),将用户输入的分钟数 转化为小时数和分钟数,并要求小时数尽量大。讲结果以 XX H, XX M 的形式打印出来。(注意打印格式中的空格)
要求用户能够通过命令行输入分钟数,程序需要打印出相应的小时数和分钟数。如果用户输入的是一个负值,程序需要报错 ValueError,需要进行 try…except 操作来控制异常。如果异常,在屏幕上打印出 ValueError: Input number cannot be negative 提示用户输入的值有误。
a = input("please input a positive number:")
def hours(b):
n = b / 60
m = b % 60
print("%d H, %d M" % (n, m))
if int(a) < 0:
try:
raise ValueError
except ValueError:
print("this is a negative number.")
else:
hours(int(a))
raise ValueError后面也可以接括号提示出现这类错误的信息。例如:
raise ValueError(”this is a negative number.”)
3、try … finally
无论异常是否发生,在程序结束前,finally中的语句都会被执行。
a = 10
b = 0
try:
print(a/b)
except:
print("error")
finally:
print("all done")
最后结果输出:
error
all done