目录
异常处理
程序运行出错时能够继续运行剩余的程序,而不是因为异常而终止
Python 中描述异常的类: BaseException --> Exception --> NameError, ValueError....
BaseException 下面一共四个子类,现在只关注 Exception
1. 抛出异常:发生异常,生成代表该异常的一个对象,停止当前路径,将异常提交给解释器
2. 捕获异常:解释器得到该异常,寻找相应代码解决
try 结构
try:
print("step 1") # 如果这部分某一位置出错,该位置后面的都不执行
a = 1 / 0
print("step 2")
except BaseException as e: # 当错误发生的时候,执行,错误不发生不执行
print("step 3")
print(e)
#############################
step 1
step 3
division by zero
#############################
判断输入的是不是数字
while True:
try:
a = input("请输入一个数字:")
if int(a) == 18:
print("over!")
break
except:
print("输入错误!")
多个except结构
try:
a = input("请输入被除数: ")
b = input("请输入除数: ")
c = float(a) / float(d)
print(c)
except ValueError:
print("不能转化为数字类型!")
except NameError:
print("没有定义变量!")
except BaseException as e:
print(e)
# 一般先子类,再父类
try except else 结构
try:
a = input("请输入被除数: ")
b = input("请输入除数: ")
c = float(a) / float(b)
except BaseException as e:
print(e)
else:
print("没有异常出现")
# 没有异常出现,则最后会执行else,出现异常则不执行
try except finally 结构
try:
a = input("请输入被除数: ")
b = input("请输入除数: ")
c = float(a) / float(b)
except BaseException as e:
print(e)
finally:
print("无论如何我都发生")
# 无论有没有异常发生,finally 后总会运行
# 常用于关闭文件,释放资源
# 如果是在一个函数中,最后可以加 return 返回所需要的值,但是一般放在结构的最后
常见的错误
SyntaxError:语法错误
NameError:变量未申明
ZeroDivisionError:被除数为0
ValueError:数值错误,例如字母转化为数值
TypeError:类型错误,例如字符串和数字相加
AttributeError:访问对象不存在
IndexError:索引越界
KeyError:字典的关键字不存在
traceback 模块
import traceback
try:
a = input("请输入被除数: ")
b = input("请输入除数: ")
c = float(a) / float(b)
except BaseException:
traceback.print_exc() # 打印完整的错误信息
finally:
print("无论如何我都发生")
# 或者
# with open("a.txt", "a") as f:
# traceback.print_exc(file=f)
# 记录到文件中
自定义异常类
class AgeError(Exception):
def __init__(self, ageinfo):
Exception.__init__(self)
self.ageinfo = ageinfo
def __str__(self):
return str(self.ageinfo) + "年龄出错,应该在120岁以内!"
if __name__ == '__main__': # 测试时,判断是不是独立文件,是的话为True
a = int(input("age = "))
if a < 0 or a > 120:
raise AgeError(a)
else:
print("年龄正确", a)
########################################
age = 121
Traceback (most recent call last):
File "E:/Python_Lyy/learn_1/py01.py", line 11, in <module>
raise AgeError(a)
__main__.AgeError: 121年龄出错,应该在120岁以内!
########################################