抛出异常
assert语句
当assert语句后面的内容是假时,终止程序报出异常(AssertionError)。
1 ls=[1,2] 2 assert len(ls)>1 3 ls.pop() 4 assert len(ls)>1
raise语句
raise [Exception[,args[,traceback]]]
Exception是异常类型,可以使标准异常中的任何一种,也可以是自己设定的,args是自己提供的异常参数,最后一个参数为跟踪异常对象,一般很少用。
raise Exception("wrong")
异常可以有参数,在抛出时会说明自己写入的错误原因。
编写Exception的常用模板:
class CustomError(Exception): def __init__(self,ErrorInfo): super().__init__(self) self.errorinfo=ErrorInfo def __str__(self): return self.errorinfo
这样就可以使用自己编写的异常去完成这个抛出异常的操作。
异常种类
IndexError(索引超出),AttributeError(尝试访问未知的对象属性),KeyError(字典中查找一个不存在的关键字),NameError(尝试访问一个不存在的变量)
OSError(操作系统产生异常,例:打开不存在的文件),SyntaxError(Python语法错误),ZeroDivisionError(除数为零)
捕获异常
try-except语句
try: 检测范围 except Exceptiom[as reason]: 出现异常后的处理代码 try: f=open('1.txt') print(f.read()) f.close() except OSError: print('wrong')
针对不同的异常可以设置多个except,同时如果想了解具体异常情况,可以进行reason的输出。
except OSError as reason: print("wrong:"+str(reason))
对多个异常也可以进行统一处理,捕获所有异常
````#捕获多个异常 except OSError as reason: print(''+str(reason)) except TypeError as reason: print(''+str(reason)) ````#捕获所有异常 except: print("error") ````
try-finally语句
finally是用来收拾残局的,比如在打开文件后,因为其他的语句出现错误,而导致文件不能正常关闭,那么可能导致文件内容丢失,所以我们需要finally收拾残局。
try: f=open("1.txt") print("success") sum=1+'1' f.close() except: print("error") finally: f.close()
else可以跟在while,try,for后面,但是如果break或者出现异常,else将不会执行。
使用with语句打开文件不会出现忘记关闭的情况。
try: with open("1.txt"): for each_line in f: print(each_line) except OSError as reason: print("error")