点击跳转 《Python入门系列目录》
文章目录
1. 用try语句处理异常1.1 try-except1.2 try-finally
2. 常见的异常处理3. 内置异常类4. 捕获异常的顺序5. 自定义异常类
程序的错误
语法错误运行时错误逻辑错误
1. 用try语句处理异常
异常捕获可以使用try语句来实现,任何出现在try语句范围内的异常都会被及时捕获到try语句的两种常见形式
try-excepttry-finally try块必须与except或finally块一起使用
1.1 try-except
执行方式如下
尝试执行try语句内可能出现问题的代码如果发现确实出现了我们所写的异常,则执行except部分的处理代码,然后正常执行后面的代码否则直接执行try语句中的代码段,然后正常执行后面的代码
try:
f
= open("F:/file.txt", 'r')
except FileNotFoundError
:
print('文件找不到!!')
try:
f
= open("file1.txt", 'r')
print(a
)
except FileNotFoundError
:
print("文件找不到!")
except NameError
:
print("变量未定义!")
若无法确定要对哪一类异常做处理时,也可以写成如下形式
...
except:
print("出错了!")
...
处理除数有0的异常
try:
s
= input("请输入一个数学表达式:")
print(eval(s
))
except ZeroDivisionError
:
print("除数不可以为0!")
1.2 try-finally
执行方式如下
尝试执行try语句内可能出现问题的代码如果发现确实出现了我们所写的异常,则执行except部分的处理代码,然后必须执行finally部分的代码,再去执行后面其他的代码如果没有发现异常,则直接执行try语句中的代码段,跳过except部分,但仍要执行finally部分的代码,再去执行后面其他的代码一个try块后最多只能接一个finally块
try:
f
= open("result.txt", 'r')
print(a
)
except NameError
:
print("变量未定义!")
finally:
f
.close
()
对于try-finally模型来说,except语句部分是可有可无的,如果不写except语句部分,则如果发生异常,会输出Traceback信息,然后执行finally部分的语句
try:
f
= open("result.txt",'r')
print(a
)
finally:
f
.close
()
2. 常见的异常处理
异常描述
NameError尝试访问一个不存在的变量ZeroDivisionError除数为0SyntaxError语法错误IndexError索引超出序列范围KeyError请求一个不存在的字典关键字OSError操作系统产生的错误,就像打开一个不存在的文件会引发FileNotFoundError,它是OSError的子类AttributeError尝试访问未知的对象属性TypeError不同类型间的无效操作,比如:1 + ‘1’
3. 内置异常类
4. 捕获异常的顺序
except块可以捕获并处理特定的异常类型(此类型称为“异常筛选器”),具有不同异常筛选器的多个except块可以串联在一起
a
= (44, 78, 90, -80, 55)
total
= 0
try:
for i
in a
:
if i
< 0:
raise ValueError
(str(i
) + "为负数")
total
+= i
print('合计=', total
)
except Exception
:
print('发生异常')
except ValueError
:
print('数值不能为负')
5. 自定义异常类
自定义异常类一般继承于Exception或其子类自定义异常类的命名规则一般以Error或Exception为后缀
class NumberError(Exception
):
def __init__(self
, data
):
Exception
.__init__
(self
, data
)
self
.data
= data
def __str__(self
):
return self
.data
+ ':非法数值(<0)'
def total(data
):
total
= 0
for i
in data
:
if i
< 0:
raise NumberError
(str(i
))
total
+= i
return total
data1
= (44, 78, 90, 80, 55)
print('总计=', total
(data1
))
data2
= (44, 78, 90, -80, 55)
print('总计=', total
(data2
))