异常处理
1.NamError
访问未定义的变量
>>> print (jj) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'jj' is not defined
最后一行包含了错误的详细信息,其余行显示它是如何发生(或什么引起该异常)的详细信息。
2. TypeError
TypeError 也是一种经常出现的异常。当操作或函数应用于不适当类型的对象时引发,一个常见的例子是对整数和字符串做加法。
>>> print (1+'zw') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
3.异常处理
try: statements to be inside try clause statement2 statement3 ... except ExceptionName: statements to evaluated in case of ExceptionName happens
它以如下方式工作:
首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。
如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。
如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。
如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。
如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息
def get_number(): ":return a float number" number = float (input("请输入一个float类型数字:")) return number while True: try: print(get_number()) except ValueError: print("输入错误数据类型。") 请输入一个float类型数字:33.3 33.3 请输入一个float类型数字:21 21.0 请输入一个float类型数字:55.44212 55.44212 请输入一个float类型数字:f 输入错误数据类型。 请输入一个float类型数字:da 输入错误数据类型。
4.抛出异常
raise
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行
try: s = None if s is None: print "s 是空对象" raise NameError #如果引发NameError异常,后面的代码将不能执行 print len(s) #这句不会执行,但是后面的except还是会走到 except TypeError: print "空对象没有长度" s = None if s is None: raise NameError print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里
我们可以使用raise语句自己触发异常
raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
>>> raise ValueError("A value error happened.") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: A value error happened.
5.定义清理行为
try 语句还有另一个可选的 finally 子句,目的在于定义在任何情况下都一定要执行的功能。
不管有没有发生异常,finally 子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。
在真实场景的应用程序中,finally 子句用于释放外部资源(文件或网络连接之类的),无论它们的使用过程中是否出错。
浙公网安备 33010602011771号