python3基础教程[第一版] 下

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('\t用户注册信息管理系统')
 56         print('\t1.显示全部已注册用户')
 57         print('\t2.查找修改删除用户信息')
 58         print('\t3.添加新用户')
 59         print('\t4.保存用户数据')
 60         print('\t5.清空数据')
 61         print('\t6.退出系统')
 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('\n出错了:')
 89     print('日期时间 :  ',x)
 90     print('异常信息 :  ',ex)
 91     print('堆栈跟踪信息:')
 92     print_tb(ex.__traceback__)
 93 
 94     #将异常异常信息写入文件
 95     print('\n出错了:',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的用户注册系统,在此不再呈现

 

 

 

 

posted @ 2018-02-06 14:17  T丶jl  阅读(533)  评论(0编辑  收藏  举报