文章目录
CH7. 异常处理
Bug的由来及分类
- Bug是指计算机程序/机器中的故障
- 语法错误
- 方法调用错误
- 思路不清
- 外部输入处理错误
- …
Python中的异常处理
try-except
-
语法结构
-
try:
可能会抛出异常的代码
except 异常类型:
异常处理代码(报错后执行的代码)
-
try:
可能会抛出异常的代码
except 异常类型A:
异常处理代码(报错后执行的代码)
except 异常类型B:
异常处理代码(报错后执行的代码)
-
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
print(f'{num1} / {num2} = {result}')
except ZeroDivisionError:
print('除数为0!')
except ValueError:
print('整数输入错误!')
except BaseException:
print('未知异常!')
'''
请输入一个整数:10
请输入另一个整数:2
10 / 2 = 5.0
请输入一个整数:10
请输入另一个整数:0
除数为0!
请输入一个整数:A
整数输入错误!
'''
try-except-else<-finally>
-
语法结构为
-
try:
可能会抛出异常的代码
except 异常类型:
异常处理代码(报错后执行的代码)
else:
没有抛出异常要执行的代码
finally:
无论是否产生异常都要执行的代码
-
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
except ZeroDivisionError:
print('除数为0!')
except ValueError:
print('整数输入错误!')
except BaseException:
print('未知异常!')
else:
print(f'{num1} / {num2} = {result}')
finally:
print('程序执行结束...')
'''
输入一个整数:10
请输入另一个整数:5
10 / 5 = 2.0
程序执行结束...
请输入一个整数:10
请输入另一个整数:0
除数为0!
程序执行结束...
请输入一个整数:A
整数输入错误!
程序执行结束...
'''
raise
- 抛出一个异常,从而提醒程序出现了异常情况,程序能够正确地处理这些异常
raise
关键字的语法结构为raise [Exception类型(异常描述星系)]
try:
gender = input('请输入您的性别:')
if gender != '男' and gender != '女':
raise Exception('性别只能是男或者女')
else:
print('您的性别是:', gender)
except Exception as e:
print(e)
'''
请输入您的性别:男
您的性别是: 男
请输入您的性别:no
性别只能是男或者女
'''
Python中常见的异常类型
异常类型 | 描述说明 |
---|---|
ZeroDivisionError | 当除数为0时,引发的异常 |
IndexError | 索引超出范围所引发的异常 |
KeyError | 字典取值时key不存在的异常 |
NameError | 使用一个没有声明的变量时引发的异常 |
SyntaxError | Python中的语法错误 |
ValueError | 传入的值错误 |
AttributeError | 属性或方法不存在的异常 |
TypeError | 类型不合适引发的异常 |
IndentationError | 不正确的缩进引发的异常 |
代码调试方法
-
设置断点
-
Debug调试运行代码
-
异常处理机制
异常处理实战
实战1
- 编写程序接收用户输入分数信息
- 如果分数在0-100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0-100之间
try:
score = int(input('请输入分数:'))
if score < 0 or score > 100:
raise Exception("分数不正确,必须在0~100之间")
else:
print(f'分数为:{score}')
except Exception as e:
print(e)
实战2
- 编写程序实现组成三角形的判断
- 判断三个变量是否能构成一个三角形,如果不能则抛出异常Exception,显示异常信息,“a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长
try:
a = int(input('请输入第一条边长:'))
b = int(input('请输入第二条边长:'))
c = int(input('请输入第三条边长:'))
if a+b>c and a+c>b and b+c>a:
print(f'三角形的边长为:a={a} b={b} c={c}')
else:
raise Exception(f'{a},{b},{c}不能构成三角形')
except Exception as e:
print(e)