1. 异常分类
异常分为:语法错误和异常
语法错误
语法错误通常自己书写不规范等造成的规范上的错误
异常
异常通常由逻辑上的错误而造成的
比方说:除数为0等等
异常处理
while True:
try:
内容
except ValueError:
print(‘your value is error’)
while True:
try:
a=int(input('aaa:'))
break
except ValueError:
print('your value is error')
aaa:adfa
your value is error
aaa:13
首先执行try语句
如果报的异常的类型是except之后的异常类型就运行except
最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出
可以有多个except或者多个异常类型,用,隔开
抛出异常
Python使用raise语句抛出一个异常
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise
try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。
使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到的、而except又没有捕获的异常。
异常处理并不仅仅处理那些直接发生在try子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
用户自定义异常
所有的异常类都继承Exception,可以直接继承或间接继承
class MyError(Exception):
def __init__(self,value):
self.value=value
def __str__(self):
print(self.value)
在这个例子中Exception异常中的构造方法被重写
当创建一个模块可能抛出多种不同的异常的时候,一种方法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类
定义清理行为
try:
except:
后面还可以选一个可选的字句finally,他定义了无论任何情况都会执行的清理行为
不管try是否发生异常,finally都会执行
清理行为概念
就像在对文件进行操作的时候,最后都需要对文件进行关闭,这个关闭就是文件的清理行为
抛出异常和捕获异常的概念
抛出异常:方法本身不对这个异常进行处理,而只有在调用这个方法的时候进行处理
捕获异常:在方法本身自己将异常进行处理