介绍
什么是异常?
程序在运行过程中出现了不可预知的错误
并且该错误没有对应的处理机制,那么就会以异常的形式表现出来
造成的影响就是整个程序无法再正常运行
异常的结构
1.异常的类型:NAMEERROR
2.异常的信息:name 'fdsdfsdf' is not defined
3.异常的位置:Traceback (most recent call last):
异常类型
-
语法错误
SyntaxError
语法错误应该在程序运行前就修正
-
逻辑错误
1.NameError : 未定义
2.IndexError : 容器类型取不存在的值时
3.AttributeError : 对象取不存在的属性时
4.KeyError : 用一个不存在的键取值时
5.ZeroDivisonError : 1/0
6.TypeErroe : 类型错误
7.ValueError
处理异常
-
能确定异常类型
try用来捕捉异常,当捕捉的代码块的错误类型与except指定的错误类型一致时,代码会继续运行
except有elif的相似功能,用来判断多种异常类型
try:
可能报错的代码块
except 错误类型 as e: # e是错误信息
代码块
-
不能确定异常类型
Exception是万能异常,可以匹配任何的异常类型
try:
可能报错的代码块
except Exception as e: # e是错误信息
代码块
-
其他
try:
代码块
except 错误类型1 as e:
代码块1
except 错误类型2 as e:
代码块2
else:
没有异常时触发的代码块
finally:
有没有异常都会触发的代码块
主动抛出异常
if 条件:
raise 错误类型
断言 assert
aassert 相当于 if + raise
traceback模块
问题: python 报错信息被Exception as e接住 怎么查看报错信息
解决:
import traceback
try:
1111 - aaa
raise Exception
except Exception as e:
print(e.__repr__(),traceback.print_exc())
>>>:
NameError("name 'aaa' is not defined",) None
Traceback (most recent call last):
File "D:/study/学习代码/flask_test1/s1.py", line 76, in <module>
1111 - aaa
NameError: name 'aaa' is not defined
自定义异常类型
class MyException(BaseException):
def __init__(self, msg):
super().__init__()
self.msg=msg
def __str__(self):
return '%s' %self.msg
raise MyException('类型错误')