模块和包
- 模块本质上就是已经写好的py文件,封装好,后续好重复利用
- 导入包或者模块的路径是先本目录,然后sys.path中的路径,这是一个列表,本质上是增加它
方法一:import 模块名 方法二:from 模块名 import *或者函数名或者参数 #不建议用* 方法一本质上是把模块运行了一遍保存在内存中,用模块名指向这片内存 方法二本质上是把模块里面某个变量或者函数运行一遍,然后本文件可以直接调用
- 包是逻辑上存放一系列模块的文件夹,导入包的本质就是去执行包下的init.py文件
在其他地方导入包时,实际上是去执行包里的__init__.py文件 所以如果包里有多个模块名,__init__.py里应该有from . import 模块名 建议还是 方法一:import 包名.模块名,使用的话:包名.模块名.…… 方法二:from 包名 import 模块名,使用的话:模块名.……
模块分类
-
标准库(常用自带模块),时间time,os,sys,hashlib,re正则,random随机,序列化。
import datatime #时间模块 x = datetime.datetime.now() print(x) #输出2019-03-26 17:16:46.919626 import random #随机模块 print(random.randint(0,9)) #随机整数0-9 print(random.randomrang(0,9)) #随机整数0-8 #验证码实例 import random verification_code = "" for i in range(4): guess_num = random.randint(0,3) if guess_num >1: tmp_num = random.randint(0,9) else: tmp_num = chr(random.randint(65,90)) verification_code += str(tmp_num) print(verification_code) import sys sys.argv #这样才系统上执行脚本时可以带上参数,sys.argv[1]是第一个参数 import configparser #配置文件模块 conf = configparser.ConfigParser() conf["default"] = {"money":"45", "gold":"100"} with open("example.conf","w") as f: conf.write(f) # 就这里与文件读写有区别,是con对象写入f hashlib模块 import hashlib
可以参考老男孩星儿老师的博客写的很详细
- 开源模块
- 自定义模块
异常
try:
# 尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except 错误类型2:
# 针对错误类型2,对应的代码处理
pass
except Exception as result:
# 打印错误信息
print(result)
else:
# 没有异常才会执行的代码
pass
finally:
# 无论是否有异常,都会执行的代码
print("无论是否有异常,都会执行的代码")
- try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
- except 如果不是,下方编写尝试失败的代码
- 捕获所有未知错误的
except Exception as result:print("未知错误 %s" % result)
- else 只有在没有异常时才会执行的代码
- finally 无论是否有异常,都会执行的代码
- 整个执行顺序先try,然后只要没有错误就执行else底下代码,最后执行finally底下代码,错误的话是先try,后异常捕获,最后finally
- 主动抛出异常
raise
,提示用户 输入密码,如果长度少于8,抛出异常
def input_password():
# 1. 提示用户输入密码
pwd = input("请输入密码:")
# 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3. 密码长度不够,需要抛出异常
# 1> 创建异常对象 - 使用异常的错误信息字符串作为参数
ex = Exception("密码长度不够")
# 2> 抛出异常对象
raise ex
try:
user_pwd = input_password()
print(user_pwd)
except Exception as result:
print("发现错误:%s" % result)