day21 模块 异常处理
常用模块:http://www.cnblogs.com/Eva-J/articles/7228075.html
今日概要:
#time # —— 时间:时间戳 字符串 结构化时间 #collections —— 扩展数据类型的模块:可命名元祖,有序字典,默认字典,双端队列,计数器 #sys —— 和py解释器打交道的模块 #—— sys.path : 和路径有关,且关系到模块导入相关的路径 #—— sys.argv : [xxx.py,argv1,argv2],python xxx.py argv1 argv2 ... #常用模块 # random 随机数相关 *** # os 操作系统相关 ***** # 序列化 # json ***** # pickle **** # shelve *** #异常处理 *****
random模块:
import random # print(random.random()) #0-1之间的小数 # print(random.uniform(10,12)) #n,m 之间的小数 #生成随机整数 # print(random.randint(1,2)) #必须是两个参数,规定一个范围 [1,2] # print(random.randrange(100)) #一个参数 # print(random.randrange(1,2)) #两个个参数 [1,2) # print(random.randrange(90,100,2)) #三个参数,最后一个是步长 #从一个序列中随机选择:一个 choice,多个 sample # print(random.choice('abc')) # print(random.sample([1,'23',[4,5]],2)) #打乱一个序列的顺序 # item=[1,3,5,7,9] # random.shuffle(item) #改变了原列表 # print(item) #验证码 #生成一个6位数字随机验证码 #randint(100000,999999) #randrange(100000,1000000) # l = [] # for i in range(6): # rand_num = random.randint(0,9) # l.append(str(rand_num)) # print(''.join(l)) #生成一个6位数字随机验证码,不能有重复,少了好多种情况 # print(random.sample(range(0,10),6)) #[0,1,2,3,4,5,6,7,8,9] #生成一个6位数字+字母的验证码 #0-9 randrange(0,10) #a-z 65-90,97-122 #几个数字几个字母 # 方法一 # l = ['a','b'...,'z','0','1','2'...'9'] sample 取6个 # for i in range(6): # rand_val = random.choice(l) #方法二 # alpha = random.randint(65,90) #random.randrange(65,91) # alpha2 = chr(alpha) # print(alpha2) # num = random.randint(0,9) #random.randrange(0,10) # print(num) # print(random.choice([alpha2,str(num)])) l = [] for i in range(6): alpha = chr(random.randint(65, 90)) # random.randrange(65,91) alpha_lower = chr(random.randint(97, 122)) # random.randrange(65,91) num = str(random.randint(0, 9)) ret = random.choice([alpha,num,alpha_lower]) l.append(ret) print(''.join(l))
os模块:
import random # print(random.random()) #0-1之间的小数 # print(random.uniform(10,12)) #n,m 之间的小数 #生成随机整数 # print(random.randint(1,2)) #必须是两个参数,规定一个范围 [1,2] # print(random.randrange(100)) #一个参数 # print(random.randrange(1,2)) #两个个参数 [1,2) # print(random.randrange(90,100,2)) #三个参数,最后一个是步长 #从一个序列中随机选择:一个 choice,多个 sample # print(random.choice('abc')) # print(random.sample([1,'23',[4,5]],2)) #打乱一个序列的顺序 # item=[1,3,5,7,9] # random.shuffle(item) #改变了原列表 # print(item) #验证码 #生成一个6位数字随机验证码 #randint(100000,999999) #randrange(100000,1000000) # l = [] # for i in range(6): # rand_num = random.randint(0,9) # l.append(str(rand_num)) # print(''.join(l)) #生成一个6位数字随机验证码,不能有重复,少了好多种情况 # print(random.sample(range(0,10),6)) #[0,1,2,3,4,5,6,7,8,9] #生成一个6位数字+字母的验证码 #0-9 randrange(0,10) #a-z 65-90,97-122 #几个数字几个字母 # 方法一 # l = ['a','b'...,'z','0','1','2'...'9'] sample 取6个 # for i in range(6): # rand_val = random.choice(l) #方法二 # alpha = random.randint(65,90) #random.randrange(65,91) # alpha2 = chr(alpha) # print(alpha2) # num = random.randint(0,9) #random.randrange(0,10) # print(num) # print(random.choice([alpha2,str(num)])) l = [] for i in range(6): alpha = chr(random.randint(65, 90)) # random.randrange(65,91) alpha_lower = chr(random.randint(97, 122)) # random.randrange(65,91) num = str(random.randint(0, 9)) ret = random.choice([alpha,num,alpha_lower]) l.append(ret) print(''.join(l))
序列化模块:
# 什么叫做序列化 # 字符串 列表 字典 元组 # 字典和列表 不能写到文件里 #{[]} ==str== str({[]}) #str({[]}) == eval('') # s_dic = str({'k':'v'}) # print(repr(s_dic)) # print(repr(eval(s_dic)),type(eval(s_dic))) # 序列化方法 # 格式转换 # 把python中的数据转换成str —— 序列化 # 可以str转换成python的数据 —— 反序列化 #json #所有的语言都通用,它能序列化的数据是有限的:字典列表元组 #序列化中的内容只能包含:字典 列表 数字 字符串,如果是元组——自动转成列表的样子 import json # ret = json.dumps({'k':(1,2,3)}) # print(repr(ret),type(ret)) # ret2 = json.loads(ret) # print(repr(ret2),type(ret2)) # f = open('json_file','a') # json.dump({'k':'v'},f) # f.close() # with open('json_file') as f: # ret = json.load(f) # print(ret,type(ret)) # for line in f: # json.loads(line) # str = json.dumps(dict) # f.write(str+'\n') #回去自己练 #pickle是py特有的 #dumps #loads #dump #load #pickle ---- 序列化任何数据类型,python专有的不能和其他语言兼容,结果是bytes # import pickle #用pickle序列化的数据,反序列化也必须用pickle # ret = pickle.dumps({1,2,3,4}) # print(ret) #shelve 只提供一个open,shelve.open('文件名')拿到一个文件句柄,这个文件句柄就可以当做字典操作 #正常情况下shelve打开的文件句柄感知不到值的修改,设置writeback = True就可以保存修改内容了 #正常情况下不支持多个人同时写,支持多个人同时读,如果只是读的化,就设置flag=‘r’ # import shelve # f = shelve.open('shelve_file') # f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 # f.close() # import shelve # f1 = shelve.open('shelve_file') # existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错 # f1.close() # print(existing) #不支持多个人同时写,支持多个人同时读,如果只是读的化,就设置flag=‘r’ # import shelve # f = shelve.open('shelve_file',flag='r') # f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 # f.close() # f1 = shelve.open('shelve_file') # print(f1['key']) # f1['key']['new_value'] = 'this was not here before' #改 # f1.close() # # f = shelve.open('shelve_file',flag='r') # print(f['key']) # f.close() #正常情况下shelve打开的文件句柄感知不到值的修改,设置writeback = True就可以保存修改内容了 import shelve # f2 = shelve.open('shelve_file', writeback=True) # print(f2['key']) # f2['key']['new_value'] = {1,2,3} # f2.close() # import shelve f = shelve.open('shelve_file',flag='r') print(f['key']) f.close() #json :所有语言通用,能转换的数据类型有限 ***** #pickle :只限于python,能转换所有的数据类型 做游戏的时候 #shelve : 只限于python语言,能转换所有的数据类型,使用方法类似字典
异常处理:
#异常 # a #NameError 错误 # 2+'' #TypeError 错误 # 1/0 #ZeroDivisionError 错误 #iter([]).next() #AttributeError 错误 # iter([]).__next__() #StopIteration 异常 # import hahaha #ModuleNotFoundError # [][4] #IndexError # try: # a=1 # except NameError: # print('NameError') # print(123) # try: # num = int(input('请输入序号 : ')) # # print(num) # # 1/0 # except ValueError as e: # print('出错啦',e) # except Exception as e: # print('') #try except语句 #需要检测异常的代码放在try代码块 #需要处理的代码放在except代码块 #不报错不执行except内的代码,except处理的错误名称应该和实际报错一致,否则无效 #如果报错try中报错之后的代码不执行 #不影响try外面的代码 #except ErrorName as 变量名:变量名中存储的就是错误的具体提示 #except支持多分支处理的方式,从上到下先找到能处理的error类型,就执行该except中的内容 #万能异常 except Exception as e,e表示错误提示,应该放在所有except之后 #对于你已经预料到的错误 应该使用指定的异常进行特殊处理 #万能异常是用来处理预料不到的异常类型的 # try: # num = int(input('请输入序号 : ')) # except Exception as e: # print('异常啦') # else: #如果try中的代码不会发生异常,就走这个else中的内容 # print('没毛病') # try: # num = int(input('请输入序号 : ')) # except Exception as e: # print('异常啦') # else: #如果try中的代码不会发生异常,就走这个else中的内容 # print('没毛病') # finally: # print('不管异常不异常我都走这个') def func(): f = open('f','w') try: for i in range(10): f.write(i) except Exception: print(123) return finally: #在一个函数中 操作一个文件 需要关闭,在finally中关闭 print('before close') f.close() print('after close') func() #异常处理:不要在大段代码外面加 ********* def main(): func() func() try: main() except Exception: pass