Python(IT峰)笔记13(基础完结)-异常的概念、try..except详解,自定义异常处理类,自定义模块的使用,自定义包及其使用,导入方式的分类

1、异常的概念

异常的种类
1、语法错误导致的异常
2、逻辑错误导致的异常

在python(其实在各类语言)中异常是一个对象

如何处理异常
1、如果错误的发生是可以预知的,那么就可以使用流程控制进行预防处理
2、如果错误发生的条件不可预知,就可以使用try…except来处理

2、try-except详解

1、处理指定的异常类,如果引发了非指定异常,则无法处理

try:
	s1 = 'hello'
	int(s1)  # 引发ValueError
except ValueError as e:
	print(e)

结果:
invalid literal for int() with base 10: ‘hello’
2、多分支异常处理,触发了哪个异常就执行那个异常处理语句

# 多分支异常处理,触发了哪个异常就执行那个异常处理语句
s1 = 'hello'
try:
	#int(s1)  # 引发ValueError
	s1[10]
except IndexError as e:
	print('indexError', e)
except ValueError as e:
	print('ValueError', e)
except KeyError as e:
	print('KeyError', e)

3、通用异常类Exception

# 通用异常处理
s1 = 'hello'
try:
	int(s1)  # 引发ValueError

except Exception as e:
	print('ExceptionError', e)

结果:
indexError invalid literal for int() with base 10: ‘hello’

4、多分支+通用异常类Exception
从上往下,有分支先处理分支,没有分支,直接通用分支

# 通用异常处理
s1 = 'hello'
try:
	int(s1)  # 引发ValueError
except ValueError as e:
	print('ValueError', e)
except Exception as e:
	print('ExceptionError', e)

5、try…except…else
try代码块没有引发异常时执行

s1 = 'hello'
try:
	int(s1)  # 引发ValueError

except IndexError as e:
	print('indexError', e)
except ValueError as e:
	print('valueError',e)
else:
	print('try代码块没有引发异常时执行')

6、try…except…else…finally
无论是否引发异常都会执行

s1 = 'hello'
try:
	int(s1)  # 引发ValueError

except IndexError as e:
	print('indexError', e)
except ValueError as e:
	print('valueError',e)
else:
	print('try代码块没有引发异常时执行')
finally:
	print('无论是否引发异常都会执行')

7、使用raise语句,主动抛出异常

try:
	raise Exception('主动抛出的异常')

except Exception as e:
	print('Exception', e)#Exception 主动抛出的异常

8、assert断言
直接判断语句是否成立,成立则无问题,不成立则抛出异常

assert 2 == 1#AssertionError
3、自定义异常处理类

如,异常出现是,对异常信息写入日志
模块:
traceback
logging

import traceback
import logging
#通过traceback模块获取异常信息

try:
	int('aa')
except:
	errormsg=traceback.format_exc()
	print(errormsg,repr(errormsg))


自定义异常处理类

#自定义异常日志处理类
class Myexception():
	def __init__(self):
		import traceback
		import logging

		#loggin的基本配置
		logging.basicConfig(
			filename='./error.log',#日志文件目录
			format='%(asctime)s %(levelname)s \n %(message)s',#格式化存储的日志格式
			datefmt='%Y-%m-%d %H:%M:%S'
		)

		#写入日志
		logging.error(traceback.format_exc())

#使用自定义异常类
try:
	int('aaa')
except:
	print('在此处进行自定义异常的处理')
	Myexception()#在异常处理的代码块中去调用自定义异常类

结果
在当前目录中生成了error.log文件,文件内容如下

2021-09-20 23:40:16 ERROR 
 Traceback (most recent call last):
  File "E:/MyProject/python/ex01/hello.py", line 19, in <module>
    int('aaa')
ValueError: invalid literal for int() with base 10: 'aaa'
4、模块与包–自定义模块的使用

定义的一个python的文件,后缀名为.py。这个文件就被称为模块。
模块中通常会定义一些相似的类,函数等代码内容,提供给别的程序引入后使用

系统模块
系统模块也是一个python程序脚本,默认安装,直接使用import导入到程序即可,如import logging

自定义模块
自己创建一个python文件,定义一些类或方法,提供给别的脚本导入后使用

  • 模块文件mymodule.py
#定义类
class Mymodule():
	def func1(self):
		print('this menthod is from customed module func1')

#直接定义函数
def func2():
	print('this menthod is from customed module func2')

#定义变量
words='hello world'
chinese='中秋节快乐'
  • 主入口文件
#使用自定义模块
import mymodule#mymodule是模块的文件名不是模块名
#导入模块中的指定内容
from mymodule import chinese
object=mymodule.Mymodule()
print(object)#<mymodule.Mymodule object at 0x00000236CA4D9400>
object.func1()#this menthod is from customed module
mymodule.func2()#this menthod is from customed module func2
print(mymodule.words)#hello world
print(chinese)#中秋节快乐

5、模块与包–自定义包及其使用

包可以理解为是一个文件夹,里面包含了多个pthon文件
包的结构:
在这里插入图片描述
一般不直接导入包,而是导入指定包中的指定模块
也可以导入指定包的指定模块的指定内容(方法或变量)
import *可以全部导入

案例:
包结构
在这里插入图片描述
a.py

def func1():
	print('i am func1 from a.py')

b.py

def func2():
	print('i am func2 from b.py')

入口文件

#import package一般不直接导入包
#导入包中的指定模块
from package import a
a.func1()#i am func1 from a.py
#指定包中的指定模块导入指定内容
from package.b import func2
func2()#i am func2 from b.py
6、模块与包–导入方式的分类

绝对导入
绝对调入的方式会使用搜索路径去查找和导入指定的包或模块
impot 模块
import 包
import 包.模块
from 包 import 模块
from 模块 import 内容
from 包 import 模块
from 包.模块 import 内容

相对导入
只能在非主程序的模块中使用,不需要直接运行的模块文件
from .包名/模块名 import 模块/内容 #1个点代表当前模块
from …包名/模块名 import 模块/内容 #2个点代表上一级文件夹模块

可以增加一个搜索路径
import sys
sys.path.append(‘path’)

7、模块与包–单入口程序

单入口程序是指整个程序都是经过一个主程序文件在运行,其他程序都封装成了包和模块
main.py作为主入口文件
在这里插入图片描述

8、pyhton中第三方库的管理-pip

python的强大就是有很多第三方库
pypi.org第三方库下载站

pip第三方库管理工具
解决了包直接的依赖关系,可以方便的管理第三方库,类似于php中的composer,或者nodejs的npm或者linux中的yum
如何使用pip
pip install 库名(包名)

9、pyhton中的虚拟环境venv

1、虚拟愿景可以在pycharm中直接创建:
setting/project/Project interpreter/Virtualenv Environment直接创建开发虚拟环境
2、可以自己安装独立的虚拟环境
1、创建虚拟环境
python -m venv 虚拟环境名
2、进入虚拟环境,激活虚拟环境
windows:
需要运行安装目录/v1/scripts/目录
运行activate.bat
3、在虚拟环境中安装一些包
pip install 报名
4、查看是否具体包名安装成功
pip show 包名
5、退出虚拟环境

10、ATM项目实战–项目说明文档

要求使用面向对象编程来完成项目
1、注册:用户名,手机号,身份证号,密码(两次确认,6位长度)
2、查询:账号必须存在,密码(三次机会,不对锁卡)
3、取款:账号密码,取款金额不能大于存款
4、存款:账号必须存在,存款金额不能低于0
5、转账:账户,转账账户必须存在,三次密码机会,转账金额不能超余额
6、锁卡:账号必须存在,可以使用密码结冻,还可以使用身份证号码结冻
7、解卡:账号必须存在,只能使用身份证号进行解锁
8、补卡:使用身份证进行补卡,每个身份证只能有有一张卡,之前的卡作废
9、改密:原密码进行改密,也可以使用身份证进行改密
10、退出(保存)保存数据

12、ATM项目实战–项目分析

根据需求进行分析,思考如何对项目进行设计和架构
思考问题一:我需要哪些对象
1、银行卡对象:Card 存储银行卡信息
卡号:cardid
密码:password
余额:money
是否锁卡:islock

2、用户对象:Person 存储用户信息
用户名:name
身份证号:userid
手机号:phone
银行卡:card 银行卡对象

3、控制器:Controller 具体的操作控制类
控制器对象主要是实现ATM的主要操作,在控制器对象中定义是个方法
1、注册:register
2、查询:query
3、取款:get_money
4、存款:add_money
5、转账:save_money
6、锁卡:lock
7、解卡:unlock
8、补卡:new_card
9、改密:change_pwd
10、退出保存:save

4、视图对象:Views 显示操作界面
欢迎界面、操作界面等

思考问题二:如何存储数据
卡号:用户=》user_dict==》user.txt
身份证:卡号=》car_id_dict==》userid.txt

11、ATM项目实战–项目结构搭建

基本结构(实际就是项目目录)
在这里插入图片描述

迭代计划
增加银行操作日志

13、ATM项目实战–类的创建与基本运行

后续略,见链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值