date:2018.2.6
第六章 异常处理
1.python异常处理机制
异常处理
-
- 错误处理
- 终极行为
异常处理基本结构
try: 可能引发异常的代码 except 异常类型名称: 异常处理代码 else: 没有发生异常时执行的代码
常见异常类型
- AttributeError:访问对象属性时引发的异常,如属性不存在或不支持赋值等
- EOFError:
- ImportError:
- IndexError:
- StopIteraion:
- IndentationError:
- TabError:
- ZeroDivisionError:
可以使用多个except语句,捕捉多种可能出现的异常
except...as 结构:except(异常类型,异常类型,...) as 实例变量:
如果不在except后面指明类型,则捕获所有异常
异常处理结构可以嵌套
try...finally终止行为:finally内的语句总会执行
2.主动引发异常
raise语句引发异常
assert语句引发异常
格式:assert 测试表达式 ,data :表达式为假时引发AssertionError异常,data为异常描述
3.自定义异常
BaseException类和Exception类
前者是顶级异常超类,后者是前者的唯一子类
自定义异常类只能继承自Exception类
创建自定义异常类
用自定义异常类保存异常日志
以下为将用户注册信息管理系统加入异常后的程序(部分函数实现由于代码长度原因省略):
1 try: 2 from pickle import dump,load 3 4 ##定义user 类,实例对象的uname属性存储用户名,pwd属性存储登陆密码 5 class user: 6 #构造函数__init__()创建实例对象时初始化用户名和登陆密码,默认值为None 7 def __init__(self,uname=None,pwd=None): 8 self.uname=uname 9 self.pwd=pwd 10 11 #修改用户名和密码 12 def update(self,uname,pwd): 13 self.uname=uname 14 self.pwd=pwd 15 16 #__repr__()方法定义对象打印格式 17 def __repr__(self): 18 return'username=%-16s password=%s'%(self.uname,self.pwd) 19 ##user类代码结束 20 21 ##函数showall()显示当前已注册用户信息 22 def showall(): 23 24 #查找已注册用户 25 def find(namekey): 26 #函数结束 27 28 #修改或删除操作 29 def check_updata(): 30 #函数结束 31 32 #添加新用户 33 def adduser(): 34 #函数结束 35 36 #将用户信息保存进文件 37 def save(): 38 #函数结束 39 40 #清空数据 41 def clear(): 42 #函数结束 43 44 #程序启动######### 45 myfile=open(r'userdate.bin','rb') 46 x=myfile.read(1) 47 if x==b'': 48 userlist=list() 49 else: 50 myfile.seek(0) 51 userlist=load(myfile) 52 myfile.close() 53 54 while True: 55 print(' 用户注册信息管理系统') 56 print(' 1.显示全部已注册用户') 57 print(' 2.查找修改删除用户信息') 58 print(' 3.添加新用户') 59 print(' 4.保存用户数据') 60 print(' 5.清空数据') 61 print(' 6.退出系统') 62 print() 63 no=input('请输入序号选择对应菜单:') 64 if no=='1': 65 showall() 66 elif no=='2': 67 check_updata() 68 elif no=='3': 69 adduser() 70 elif no=='4': 71 save() 72 elif no=='5': 73 clear() 74 elif no=='6': 75 print('系统已退出') 76 break 77 else: 78 print('请重新输入') 79 80 #程序结束 81 82 except Exception as ex: 83 from traceback import print_tb 84 from datetime import datetime 85 log=open(r'do_log.txt','a') 86 x=datetime.today() 87 #显示异常日志信息 88 print(' 出错了:') 89 print('日期时间 : ',x) 90 print('异常信息 : ',ex) 91 print('堆栈跟踪信息:') 92 print_tb(ex.__traceback__) 93 94 #将异常异常信息写入文件 95 print(' 出错了:',file=log) 96 print('日期时间 : ', x,file=log) 97 print('异常信息 : ', ex.args[0],file=log) 98 print('堆栈跟踪信息:',file=log) 99 print_tb(ex.__traceback__,file=log) 100 log.close() 101 print('发生了错误,系统已退出') 102 103 ''' 104 else: 105 finally: 106 ''' 107 #结束
正常运行时,不会抛出异常,
如果我们将信息文件userdata.bin重命名,则会抛出文件错误异常,
以下则为异常内容和日志记录文件中的记录内容:
#程序运行时抛出的异常信息 出错了: 日期时间 : 2018-02-06 17:20:07.692500 异常信息 : [Errno 2] No such file or directory: 'userdate.bin' 堆栈跟踪信息: File "E:/Dev-Cpp/Pro/python/xitong/system.py", line 121, in <module> myfile=open(r'userdate.bin','rb') 发生了错误,系统已退出 Process finished with exit code 0
//do_log文件中记录的内容 出错了: 日期时间 : 2018-02-06 17:20:07.692500 异常信息 : 2 堆栈跟踪信息: File "E:/Dev-Cpp/Pro/python/xitong/system.py", line 121, in <module> myfile=open(r'userdate.bin','rb')
以下内容不再详细记录
第七章 python数据库编程
1.了解关系数据库
目前,Microsoft SQL Server、Microsoft Access、Oracle、MySQL、SQLite等常用的数据库都属于关系数据库
- 数据模型
- 层次模型
- 关系模型
- 面向对象模型
关系数据库语言:SQL语言
2.访问SQLite数据库
python的SQL接口
- 连接对象
- 游标对象
- select查询结果
3.访问MySQL数据库
4.访问Microsoft SQL Server 数据库
第八章 tkinter GUI编程
1.tkinter编程基础
一个简单的tkinter GUI程序
1 import tkinter #导入tkinter模块 2 root=tkinter.Tk() 3 w=tkinter.Label(root,text='你好,python') 4 w.pack() 5 root.mainloop()
显示如下:
可以存为.py或.pyw文件,
可以继续写为更简单模式:
from tkinter import* #导入tkinter模块 Label(text='你好,python').pack() mainloop()
2.tkinter组件
3.对话框
此书到此结束,末尾有一个GUI的用户注册系统,在此不再呈现