异常
异常常见类型
SyntaxError
NameError
IndexError
KeyError
IndentationError
异常处理语法结构
1.基本语法结构
try:
待监测的代码(可能会出错的代码)
except 错误类型:
针对上述错误类型指定的方案
2.查看错误的信息
try:
待监测的代码(可能会出错的代码)
except 错误类型 as e: # e就是系统提示的错误信息
针对上述错误类型制定的方案
3.针对不同错误类型制定不同的解决方案
try:
待监测的代码(可能会出错的代码)
except 错误类型1 as e: # e就是系统提示的错误信息
针对上述错误类型1制定的方案
except 错误类型2 as e: # e就是系统提示的错误信息
针对上述错误类型2制定的方案
except 错误类型3 as e: # e就是系统提示的错误信息
针对上述错误类型3制定的方案
...
4.万能异常 Exception/BaseException
try:
待监测的代码(可能会出现的错误代码)
except Exception as e:
针对各种常见的错误类型全部统一处理
5.结合else使用
try:
待监测的代码:(可能会出错的代码)
except Exception as e:
针对各种常见的错误类型全部统一处理
else:
try的子代码正常运行结束没有任何报错后 再执行else子代码
finally:
无论try的子代码是否报错 最后都要执行finally子代码
异常处理补充
1.断言
assert 关键字
2.主动抛异常
raise 关键字
异常处理实战应用
1.异常处理能少用就少用
2.被try检测的代码能少就少
3.当代码中可能会出现一些无法控制的情况下报错才应该考虑使用
eg:使用手机访问网络软件 断网
编写网络爬虫程序请求数据 断网
生成器对象
1.本质
内置有__iter__和__next__的迭代器对象
2.区别
迭代器对象是解释器自动提供的
数据类型\文件对象>>>:迭代器对象
生成器对象是程序员编写出来的
代码、关键字>>>:生成器对象(生成器)
3.创建生成器的基本语法
函数体代码中填写yield关键字
def my_iter():
print('好好学习 天天向上')
yield
'''
1.函数体代码中如果有yield关键字
那么函数名加括号不会执行函数体代码
会生成一个生成器对象(迭代器对象)
'''
res = my_iter()
'''
2.使用加括号之后的结果调用__next__才会执行函数体代码
'''
res = __next__()
'''
每次执行完__next__代码都会停在yield位置 下次基于该位置继续往下找第二个yield
'''
自定义range
使用公式:
def my_range():
pass
for i in my_range(0,10):
print(i)
yield冷门用法
def eat(name,food=None):
print(f'{name}准备用餐')
while True:
food = yield
print(f'{name}正在吃{food}')
res = eat('jason')
res.__next__()
生成器表达式
表达式为:
res = (i for i in 'owen')
print(res)
print(res.__next__())
索引取值与迭代取值
1.索引取值
可以任意位置任意次数取值
不支持无序类型的数据取值
2.迭代取值
只能从前往后依次取值无法后退
支持所有类型的数据取值
模块
模块就是内部具有一定功能的py文件
python模块表现形式
1.py文件(py文件也可以称之为是模块文件)
2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
3.已被编译为共享库或DLL的c或C++扩展(了解)
4.使用C编写并链接到python解释器的内置模块(了解)
模块的分类
1.自定义模块
我们自己写的模块文件
2.内置模块
python解释器提供的模块
3.第三方模块
别人的模块
导入模块的两种句式
1.import句式
2.from...import...句式
循环导入问题
1.循环导入
两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字极容易报错
2.如何解决循环导入问题
1.确保名字再使用之前就已经准备完毕
2.我们以后在编写代码的过程中尽可能避免出现循环导入
判断文件类型
所有的py文件都可以直接打印__name__对应的值
当py文件是执行文件的时候__name__对应的值是__main__
当py文件是被导入文件的时候__name__对应的值是模块名
模块的查找顺序
1.内存
2.内置
3.执行文件所在的系统环境变量
绝对导入与相对导入
绝对导入
from mymd.aaa.bbb.ccc import name #可以精确到变量名
from mymd.aaa.bbb import ccc # 也可以精确到模块名
相对导入
.在路径中表示当前目录
..在路径中表示上一层目录
..\..在路径中表示上上一层目录
不在依据执行文件所在的sys.path 而是以模块自身路径为准
from . import b
相对导入只能用于模块文件中 不能再执行文件中使用
包
内部含有__init__.py文件的文件夹(python2必须要求 python3无所谓)
包的具体使用
1.如果只想用包中某几个模块 那么还是按照之前的导入方式即可
from aaa import mad1,mad2
2.直接导入包名
import aaa
导入包其实就是导包下面的__init__.py文件,该文件内有什么名字就可以通过包电什么名字
软件开发目录规范
myproject项目文件
1.bin文件夹 主要放项目启动文件
start.py 启动文件可以放在bin目录下 也可以直接在项目根目录
2.conf文件夹 主要存放项目配置文件
settings.py 里面存放项目的默认配置 一般都是全大写
3.core文件夹 主要存放项目核心文件
src.py 里面存放项目核心功能
4.interface文件夹 主要存放接口文件
goods.py 根据具体业务逻辑分析划分对应的文件
user.py
account.py
5.db文件夹 主要存放项目相关数据
userinfo.txt
db_handler.py 存放数据库相关操作代码
6.log文件夹 主要存放项目公共功能
log.log
7.lib文件夹 主要存放项目公共功能
common.py
8.readme文件 主要存放项目相关说明
9.requirements.txt文件 主要存放项目所需模块及版本
collections模块
1.具名元组namedtuple
from collections import namedtuple
2.双端队列deque
from collections import deque
队列与堆栈:
队列:先进先出
堆栈:先进后出
队列和堆栈都是一边只能进一边只能出
双端队列:两端都可以进出
3.有序字典
from collections import OrderedDict
4.计数器 Counter
from collections import Counter
time与datetime模块
1.time模块
import time
三种时间表示形式
1.时间戳
2.结构化时间
3.格式化时间
常用模块
1.time.sleep(secs) # secs就是推迟的秒数
推迟指定秒数运行,单位为秒
2.time.time
获取当前时间戳
三种用于表达时间的格式
1.时间戳
time.time()
2.结构化时间
time.localtime()
3.格式化时间
time.strftime()
'%Y-%m-%d %H:%M:%S' 年月日 时分秒
'%Y-%m-%d %X'
2.datatime模块
import datetime
print(datetime.date.today())
print(datetime.datetime.today())
"""
date 获取的是年月日
datetime 获取到是年月日时分秒
"""
random模块
'''随机数模块'''
import random
print(random.random()) # 随机产生一个0到1之间的小数
print(random.uniform(2,4)) # 随机产生一个2到4之间的小数
print(random.randint(0,9)) # 随机产生一个0到9之间的整数(包含0和9)
print(random.randint(1,6)) # 掷骰子
图片验证码:每一位都可以是大写字母 小写字母 数字 4位
def get_code(n):
code = ''
for i in range(n):
random_upper = chr(random.randint(65, 90))
random_lower = chr(random.randint(97,122))
random_int = str(random.randint(0,9))
temp = random.chioce([random_upper,random_lower,random_int])
code += temp
return code
res = get_code(4)
print(res)
os模块
1.创建目录(文件夹)
mkdir(单级目录) makedirs(单级、多级目录)
2.删除目录(文件夹)
rmdir(删除单级目录) removedirs(删除多级目录)
只能删除空的目录
3.查看某个路径下所有的文件名称
listdir
4.删除文件、重命名文件
remove(删除文件) rename(重命名文件)
5.获取/切换当前工作目录
getcwd
6.动态获取项目根路径
abspath dirname
import os
print(os.path.abspath(__file__))
#获取执行文件的绝对路径
print(os.path.dirname(__file__))
#获取执行文件所在的目录路径
7.判断路径是否存在(文件\目录)
exists(判断路径是否存在)
isdir(是否是文件夹)
isfile(是否是文件)
8.路径拼接
import
print(os.path.join())
9.获取文件大小(字节数,bytes)
import os
print(os.path.getsize())
sys模块
"""主要是跟python解释器打交道"""
import sys
# 1.列举当前执行文件所在的sys.path
print(sys.path)
# 2.获取python解释器默认最大递归深度
print(sys.getrecursionlimit())
# 1000
# 3.修改python解释器默认最大递归深度
sys.setrecursionlimit(2000)
# 4.获取解释器版本信息
print(sys.version)
json模块
1.json格式数据是不同编程语言之间的数据交换的媒介
2.json格式数据的具体特征
"""
数据是基于网络传输肯定是二进制格式化
在Python中bytes类型的数据可以直接看成二进制数据
但是只有字符串可以转换成bytes类型
"""
双引号是json格式数据独有的标志符号
json相关操作
针对数据
json.dumps() #序列化
json.loads() #反序列化
针对文件
json.dump() # 将其他数据类型直接写入文件(自动转json格式字符串)
json.load() # 将文件数据直接转成对应的数据类型(自动反序列化)
标签:__,文件,random,模块,print,import,周报
From: https://www.cnblogs.com/super-xz/p/16819168.html