7 异常
7.1 异常的本质
try:
copyFile("d:/a.txt","e:/a.txt")
except:
print ("文件无法拷贝")
# 外部调用的人不需要会内部(copyFile)的各种判断
# 会调用就好了
异常机制的本质
BaseException
Exception
NameError、ValueError、AttributeError etc.
异常也采用对象的方式处理
7.2 try - except结构
简单结构
while True:
try:
x = int(input("请输入一个数字"))
print ("输入的数字:",x)
if x==88:
print ("退出程序")
break
except BaseException as e:
print(e)
print ("异常,输入的不是一个数字")
print ("循环输入数字程序结束!")
多个except结构
先子类后父类
try:
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a)/float(b)
print (c)
except ZeroDivisionError:
print ("异常,不能除以0!")
except ValueError:
print ("异常,不能将字符串转化为数字!")
except NameError:
print ("异常,变量不存在!")
except BaseException as e:
print(e)
7.3 try - except - else结构
有异常:执行except
无异常:执行else
7.4 try - except - finally结构
else可有可无
无论异常是都发生 都会执行finally
try:
f = open("d:/a.txt","r")
content = f.readline()
print(content)
except:
print("文件未找到")
finally:
print("run in finally,关闭资源")
f.close()
7.5 常见的语法错误
7.6 一些小的
7.6.1 _with上下文管理
释放资源 比finally更简单
with代码块执行完毕后,自动还原进入该代码之前的上下文。
不论是否有一场,总能保证资源正确释放
不是取代try - except - finally
而是为了方便 文件管理、网络通信的操作
7.6.2 _traceback模块的使用
打印日常日志
import traceback
try:
print("step1")
num = 1/0
except:
with open("d://a.txt","a") as f:
traceback.print_exc(file=f)
7.6.3 自定义异常类
class AgeError(Exception):
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self):
return str(self.errorInfo)+",年龄错误!应该在1-150之间"
if __name__ == "__main__":
age = int(input("输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age)
else:
print("正常的年龄:",age)
|