1.错误分类
Python 常见有两种错误:
- 语法错误:自己的原因导致代码写错;
- 异常:即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。
2.常见的一些python报错异常
错误代码 | 含义 |
---|---|
NameError | 名字错误 |
ZeroDivisionError | 0错误 |
TypeError | 类型错误 |
SyntaxError | 语法错误 |
IndexError | 索引超出序列范围 |
KeyError | 请求一个不存在的字典关键字 |
IOError | 输入输出错误 |
AttributeError | 尝试访问未知的对象属性 |
3.捕获异常
A.捕获单个异常
#捕捉单个异常,输出自己提示信息
try:
print(eval(input('请输入数学表达式:')))#输入3/0
except ZeroDivisionError :
print('被除数不能为0')#被除数不能为0
# 捕捉单个异常,输出报错提示信息
try:
print(1/0)
except ZeroDivisionError as e:
print(e)
B.捕获多个异常
#捕捉多个异常
#一个try和多个except或者元组结构:一个try和except(异常1,异常2...)
# 形式1
try:
a=[1,2,3]
print(a[6])#超出索引
print(1/0)
except IndexError:
print('超出索引')
except ZeroDivisionError:
print('被除数不能为0')
# 形式2
try:
a=[1,2,3]
print(a[2])
print(1/0)#结果:有异常啦!
except (IndexError,ZeroDivisionError):
#弊端:不知道具体是哪个异常
print('有异常啦!')
C.捕获所有异常
#捕捉所有异常两种格式:
#格式1:try--except
try:
a=[1,2]
print(a[9])
except:
print('有异常')
# 格式2:try-except Exception as e:
try:
a = [1, 2]
print(a[9])
except Exception as e:#可以知道具体异常
print(e)
# 格式3:try--except Exception:
try:
a = [1, 2]
print(a[9])
except Exception :#不知道具体异常
print('111')
结果:
出错异常类型和捕捉的异常不一致,会出错结束
4.try-except-else-finally结构统讲代码:
#
#不管try有没有异常,最终都会只需finally的代码
try:
print('我有错吗?')
except Exception:
print('只要有异常,就会执行我!')
else:
print('只有没有异常,才会执行我!')
finally:
print('不管有没有异常,一定会执行我!')
结果:
5.抛出异常
A.抛出系统异常
格式 | 描述 |
---|---|
raise异常类型(‘描述信息’) | 当程序执行到raise时候,会自动的触发异常,让程序结束 |
#---------当程序执行到raise,会自动触发异常,让程序结束
while True:
name=input('请输入您的名字:')
try:
if len(name)<3:
raise Exception('名字太短了!')#是因为啥才跑出的异常
else:
print('名字还行')
break
except Exception as e:
print(e)
B.抛出自定义异常
当程序中的异常类型不满足时,我们可以自定义类型异常
# 当程序异常类型不满足,可以自定义异常
class Myexception(Exception):
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
try:
raise Myexception('异常消息')
except Myexception as e:
print(e)
b = Myexception('hhh ')