异常的基础
我们使用 try...except
块来处理任意异常。基本的语法像这样:
try:
statements to be inside try clause
statement2
statement3
...
except ExceptionName:
statements to evaluated in case of ExceptionName happens
它以如下方式工作:
-
如果没有异常发生,
except
子句 在try
语句执行完毕后就被忽略了。 -
如果在
try
子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。如果异常匹配于
except
关键字后面指定的异常类型,就执行对应的except
子句。然后继续执行try
语句之后的代码。 -
如果发生了一个异常,在
except
子句中没有与之匹配的分支,它就会传递到上一级try
语句中。如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。
ValueError 的简单案例:
>>> def get_number(): ... number = float(input("Enter a float number")) # 获取用户输入的浮点数 ... return number ... >>> while True: ... try: ... print(get_number()) ... except ValueError: ... print("You entered a wrong number") ... Enter a float number22.333 22.333 Enter a float number11 11.0 Enter a float numberlll You entered a wrong number Enter a float number
抛出一个异常:
raise
>>> raise ValueError("A ValueError happend") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: A ValueError happend
try
语句还有另一个可选的finally
子句,目的在于定义在任何情况下都一定要执行的功能。例如:>>> try: ... raise KeyboardInterrupt ... finally: ... print("Goodbye world") ... Goodbye world Traceback (most recent call last): File "<stdin>", line 2, in <module> KeyboardInterrupt
异常与函数
通过一个 python 脚本,让用户输入的分钟数转换成小时数,其中用户输入的数据要使用
sys.argv[]
的方式获取import sys # 转换函数 def Hours(minute): # 如果为负数则 raise 异常 if minute < 0: raise ValueError("Input number cannot be negative") else: print("{} H, {} M".format(int(minute / 60), minute % 60)) # 函数调用及异常处理逻辑 try: Hours(int(sys.argv[1])) except: print("Parameter Error")