1.程序中的异常
-
异常
异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下:
-
异常处理
python中对异常处理的方式有2种:
1). python解释器检测到错误,触发异常(也允许程序员自己触发异常)。
2). 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关),如果捕捉成功则进入另外一个处理分支,执行程序员自定义的语句,使程序不会崩溃,这就是异常处理。 -
异常处理的方式
在python中,我们可以使python提供的特定的语法结构来进行异常处理:
1). 基本语法
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行此语句块内容
try:
# 不能确定正确之行的代码
num = int(input('请输入一个数字:'))
print(num)
except:
# try里面的代码如果有异常/错误 才会之行以下代码
print('请输入正确的整数!!!!')
运行结果如下:
2). 单分支语句
单分支只能用来处理指定的异常情况,如果未捕获到异常,则报错
try:
被检测的代码块
# 我们可以使用except与as+变量名 搭配使用,打印变量名会直接输出报错信息
except 异常名称 as e:
print(e)
try:
a
except NameError as e:
print(e)
输出结果如下:
3). 多分支语句
try:
被检测的代码块
except 异常名称:
执行此语句块内容
except 异常名称:
执行此语句块内容
try:
num = int(input('Num:'))
result = 8 / num
print(result)
except ZeroDivisionError:
print('0不能做除数')
except ValueError:
print('请输入正确的值')
运行结果:
4). 万能异常
在python的异常中,有一个万能异常:Exception,他可以捕获任意异常。
当存在Exception语句,且不是except中的异常时,其他异常都执行Exception语句块的内容:
try:
被检测的代码块
except 异常名称:
执行此语句块内容
except 异常名称:
执行此语句块内容
except Exception:
对于不属于以上异常的任意异常,执行此语句块内容
try:
num = int(input('Num:'))
result = 8 / num
print(result)
except ZeroDivisionError:
print('0不能做除数')
except Exception as r:
print('未知错误!!')
运行结果如下:
5). try…else语句
try:
被检测的代码块
except 异常名称:
执行此语句块内容
except 异常名称:
执行此语句块内容
except Exception:
对于不属于以上异常的任意异常,执行此语句块内容
else:
若程序运行没有异常,则最终执行else语句块内容
try:
num = int(input('Num:'))
result = 8 / num
print(result)
except ZeroDivisionError:
print('0不能做除数')
except ValueError:
print('请输入正确的值')
except Exception as r:
print('未知错误!!')
else:
print('hello')
运行结果如下:
遇到异常则终止
6). try…finally语句
try:
被检测的代码块
except 异常名称:
执行此语句块内容
except 异常名称:
执行此语句块内容
except Exception:
对于不属于以上异常的任意异常,执行此语句块内容
else:
若程序运行没有异常,则最终执行else语句块内容
finally:
无论是否遇到异常都会执行此语句块内容
try:
num = int(input('Num:'))
result = 8 / num
print(result)
except ZeroDivisionError:
print('0不能做除数')
except ValueError:
print('请输入正确的值')
except Exception as r:
print('未知错误!!')
else:
print('else!')
finally:
print('Finally!')
执行结果如下:
练习:用户可以一直输入数字, 当遇到异常KeyboardInterrupt (也就是ctrl+c) 之后计算所有数的和
result = 0
while True:
try:
num = int(input('Num:'))
result += num
except KeyboardInterrupt:
print('运行结果:',result)
break
运行结果: