异常
异常定义异常处理常见异常的解决with上下文管理trackback模块自定义异常
异常 异常定义
查找错误:
def c():
print(1/0)
def b():
c()
def a():
b()
a()
结果为:
报错从上往下是从最近依次调用到最初,找到第一个报错的行数,看它具体报错内容,这里是“a()”,以此类推,最后定位到552行的“print(1/0)”,错误为:ZeroDivisionError: division by zero。
1、try…一个except结构
while True:
try:
temp = int(input('请输入数字:'))
print('输入的数字是:',temp)
if temp==88:
print('退出程序')
break
except Exception as e:
print(e)
print(type(e))
print('程序结束!')
#结果为:
请输入数字:3
输入的数字是: 3
请输入数字:77
输入的数字是: 77
请输入数字:tt
invalid literal for int() with base 10: 'tt'
请输入数字:6
输入的数字是: 6
请输入数字:
2、try…多个except结构
while True:
try:
a = int(input('请输入数字:'))
b = int(input('第二个数字:'))
c = a/b
print(c)
except ZeroDivisionError: # 是baseException类的基类,所以写在前面
print('除数不能为0')
except ValueError: # 是baseException类的基类,所以写在前面
print('不能将字符串转为数字')
except NameError: # 是baseException类的基类,所以写在前面
print('变量不存在')
except baseException as e: # 前面子类没有囊括到的Error情况
print(e)
#结果为:
请输入数字:3
第二个数字:6
0.5
请输入数字:3
第二个数字:0
除数不能为0
请输入数字:tt
不能将字符串转为数字
请输入数字:3
第二个数字:r
不能将字符串转为数字
请输入数字:
3、try…except…else结构
4、try…except…finally结构
常见异常汇总:
语法结构如下:
with open('o.txt','r') as f:
s = f.readlines()
print(s)
trackback模块
1、打印异常信息
import traceback
try:
a = 1
b = 0
print(a/b)
except:
traceback.print_exc()
#结果为:
Traceback (most recent call last):
File "D:/Users/86184/PycharmProjects/try/one.py", line 588, in
print(a/b)
ZeroDivisionError: division by zero
2、将异常信息写入日志文件
import traceback
try:
a = 1
b = 0
print(a/b)
except:
with open('o.txt','a') as f:
traceback.print_exc(file=f)
结果在名为o的txt文件中:
class AgeError(Exception):
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self):
return '年龄异常'
if __name__ == '__main__':
age = int(input('输入年龄:'))
if age<1 or age>200:
raise AgeError(age) # 这里的raise有print的用处,也需要打印,所以用到了__str__方法
else:
print('年龄为:',age)
#结果为:
输入年龄:500
Traceback (most recent call last):
File "D:/Users/86184/PycharmProjects/try/one.py", line 605, in
raise AgeError(age)
__main__.AgeError: 年龄异常



