异常定义:
-如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错误被称为异常。
-出现了异常必须处理否则程序会终止运行,用户体验会很差。
-Python支持程序员自己处理检测到的异常。
-可以使用try-except语句进行异常的检测和处理。
常见的异常类型:
报错类型 | 描述 |
---|---|
AssertionError | 当assert断言条件为假的时候抛出异常 |
AttributeError | 当访问的对象属性不存在的时候抛出的异常 |
IndexError | 超出对象索引的范围时抛出的异常 |
KeyError | 在字典中查找一个不存在的key抛出的异常 |
NameError | 访问一个不存在的变量时抛出的异常 |
OSError | 操作系统产生的异常 |
SyntaxError | 语法错误时会抛出此异常 |
TypeError | 类型错误,通常是不同类型之间的操作会出现此异常 |
ZeroDivisionError | 进行数学运算时除数为0时会出现此异常 |
代码演示:
# NameError
prlnt() # 函数名拼写错误
a = 'zhang'
print(aa) # 变量名拼写错误
print(b) # 使用不存在的变量
#SyntaxError IndentationError
if 'he' == 'hi'
print(' ')
# TypeError
print(3 + '2')
tp = (1, 3, 5)
tp[2] = 4
print(tp)
# AttributeError
tp = (1, 3, 5)
tp.append(2)
print(tp)
# KeyError
d = {1: 2, 3: 4}
print(d[2])
# IndexError
tp = (1, 3, 5)
print(tp[4])
try-except语句:
-首先执行try中代码块,如果出现异常,立即终止代码执行,转而到except块中进行异常处理。
-异常处理except模块可以多个,从上往下匹配,如果能够匹配成功,立即执行相应的异常处理代码块,执行完毕后,不在往下匹配,转到3执行
-执行异常处理完毕后,如果有finally字句则执行finally字句,如果没有则执行后续语句。
-如果匹配不到异常,有finally则执行finally,然后则抛出错误,终止程序执行。
-如果没有异常,如果有else字句则执行else字句,执行完else后,有finally字句则执行,没有则执行后续语句。
代码演示:
try:
n = int(input('请输入一个数字:'))
n = 5 / n
print(n)
except ZeroDivisionError as e:
print('请重新输入一个不为0的数字')
print('原始数据:',e)
except:
print('请输入一个数字')
else:
print('运行没有被except语句捕获,执行else模块')
finally:
print('无论如何,都要执行finally模块')
raise关键字:
代码演示:
try:
password = input('请输入您的密码:')
if len(password)<8:
raise Exception('密码长度不够,请重新输入一个8位以上的密码')
except Exception as e:
print(e)
错误处理方式:
- 运行,从错误信息中找到问题
- 打印相关信息
- 注释一点点排查
- 代码调试