模块
随机数模块:
应用于:抽奖、验证码…。
(1)随机整数
例:
>>> import random
>>> print(random.randint(1,43))#随机抽取整数,包含开始值和结束值
2
(2)随机小数(0~1之间的小数)
例:
>>> import random
>>> print(random.random())
0.46100718083091796
(3)随机范围:
含头不含尾,左闭右开,不包含结束值,步长值
>>> import random
>>>
>>> print(random.randrange(0,10,2))#步长值:2
0
(4)随机序列中的某个值:
>>> import random
>>> print(random.choice(["a","1","b","2"]))
1
(5)纯数字验证码:
例:
>>> import random
>>>
print(random.randint(111111,999999))#范围:111111~999999
#您的6位验证码为:
667766
(6)大写字母加数字验证码:
例:
def verification_code(n):
code=""
for i in range(n):
num=ranndom.randint(0,9)
if num%2==0:
code+=str(random.randint(0,9))#将数字强制转成字符串
else:
code+=chr(random.randint(65,90))
return code
print(verification_code(4))
时间模块:
1、三个表示方法:
(1):时间戳(小数1970-01-01 00:00:00(格林威治时间))
时间戳的作用:方便计算机储存,方便计算
例:
import time
print(time.time())#秒数
#运行结果:
1605617302.9404888
print(time.time()/60/60/24/365)#年
#运行结果:
50.91379527456859
(2)时间元组(命名元组类型)中间形态方便获取到值。
时间元组功能:作为函数的参数,开发时使用
例:
print(time.localtime())#时间元组
#运行结果:
```python
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=17, tm_hour=20, tm_min=53, tm_sec=2, tm_wday=1, tm_yday=322, tm_isdst=0)
print(time.localtime().tm_year)#获取年份
#运行结果:
2020
(3)时间字符串:(格式化时间字符串,(给时间一个显示的格式))
例:
print(time.strftime("%Y-%M-%d %H:%M:%S"))#输出年月日时分秒
#运行结果:
2020-59-17 20:59:47
2、三者之间的转化
时间戳->时间元组->时间字符串
例:
import time
print(time.localtime())#时间元组
#将时间元组转换成时间字符串
print(time.strftime("%Y-%M-%d %H:%M:%S",time.localtime()))
#运行结果:
time.struct_time(tm_year=2020, tm_mon=11, tm_mday=17, tm_hour=21, tm_min=5, tm_sec=51, tm_wday=1, tm_yday=322, tm_isdst=0)
2020-05-17 21:05:51
逆向:时间字符串->时间元组->时间戳
import time
print(time.strftime("%Y-%M-%d %H:%M:%S",time.localtime(213142143)))
#结果:
1976-09-03 06:09:03
睡眠:
例:
import time
time.sleep(3)#暂停三秒
print('Bye!')
#运行结果:暂停三秒再执行
Bye!
hashlib加密模块(不可逆):
import hashlib
md5=hashlib.sha256("123456.".encode("utf-8"))
md5.update("""(☞^o^) ☞""".encode("utf-8"))
print(md5.hexdigest())
#运行结果:
be1f85c0a8065912d839eea0c765ebbe975de0c8702e1082a83e441670e0da98
- 实现数据序列化与反序列化
- 序列化:将数据对象转成字符串用于网络数据传输和数据存储
- 反序列化:将特定格式字符串转为数据对象的,用于在程序中运行
- json目前最流行的一种数据格式,最初是JavaScript中的格式,后被各大语言所支持。目前是不通语言代码之间进行数据通信的首选格式。
- json格式 字符串
“{key:value1,value2…}” - js与python的比较:
js | python |
---|---|
字符串"" | 字符串""and’’ |
数组 | 列表/元组 |
对象 | 字典 |
true/false | True/False |
- 例:
import json
dic={
'name':'sunshine',
'age':20,
'email':'123456@..com',
'tuple':(1,2,3,4,5,6,7,True,False)
}
print(dic)
#运行结果:
{'name': 'sunshine', 'age': 20, 'email': '123456@..com', 'tuple': (1, 2, 3, 4, 5, 6, 7, True, False)}
json模块中常用的功能:
(1)、json.dump(obj,fp)将obj对象转换成JSON字符串输出到fp流中,fp是一个支持write()方法的类文件对象。
(2)、json.dumps(obj):将obj对象转换位JSON字符串,并返回该JSON字符串。
(3)、json.load(fp):从fp流读取JSON字符串,将其回复成JSON对象,其中fp是一个支持write()方法的类文件对象。
(4)、json.loads(s):将JSON字符串s回复成python对象。
- dumps导出为json字符串
- loads加载为python对象
import json
dic={
'name':'sunshine',
'age':20,
'email':'123456@..com',
'tuple':(1,2,3,4,5,6,7,True,False)
}
data=json.dumps(dic)
print(type(data))#类型
print(data)
#结果:
<class 'str'>
{"name": "sunshine", "age": 20, "email": "123456@..com", "tuple": [1, 2, 3, 4, 5, 6, 7, true, false]}
import json
dic={
'name':'sunshine',
'age':20,
'email':'123456@..com',
'tuple':(1,2,3,4,5,6,7,True,False)
}
with open("my.json","w",encoding="utf-8") as f:
json.dump(dic,f)
with open("my.json","r",encoding="utf-8") as f:
obj=json.load(f)
print(obj["email"])#利用键值对取值。
异常处理
- 异常是一个在程序执行过程中发生,影响了程序的正常执行的事件。(一般情况下,在python无法正常处理程序时就会发生一个异常)
- 异常时python对象,表示一个错误。
- BUG臭虫.错误.debug调试;
- 当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
- python处理程序运行中出现的异常和错误的两个功能:
(1)、异常处理:让程序不报错,(不终止运行,可以提示错误,记录进错误日志)。
(2)、断言(Assertions):在需要的时候报错。
运行时发现的错误被称为异常。
例;
>>> 16/0 #0不能作为除数
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
16/0
ZeroDivisionError: division by zero
>>> a+3*2 #a未定义
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a+3*2
NameError: name 'a' is not defined
>>>
>>> '6'+1 #字符串不能和整型数字相加
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
'6'+1
TypeError: can only concatenate str (not "int") to str
1、异常捕获:
try—> :执行代码
excep–>:发生异常时所执行的代码
else–>:可选择,没有捕获到异常执行的代码
finally–>:可选择,有没有捕获到异常都会执行的代码
例:
try:
#编写又可能错误的代码
a=''
except Exception as e:
#当代码有异常时执行,无异常时不执行
#作用:1.错误时只提示,不中断
# 2.写入错误日志
# 3.不久措施,让之后的代码正常执行
print("有%s错误了呦,原因是:%s %(Exception,e)")
else:
#只当程序正常执行(可选)
print("没有错误哦!","a=",a)
finally:
#不论是否报错都会执行
for i in range(6):
print(i)
#运行结果:
没有错误哦! a=
0
1
2
3
4
5
2、python标准异常:
- BaseException:所有异常的父类
- SystemExit:解释器请求退出
- KeyboardInterrupt:用户中断执行(通常ctrl+c)
- Exception:常规错误父类
- NameError: name ‘a’ is not defined
- TyepError: Can’t convet ‘int’ object to str implictly
- IndexError: list index out of range
- SyntaxError: unexpected EOF while parsing
- IndentationError: unexpected indent
- FileNotFoundError:[Errno 2] No sunch file or directory: ‘a.txt’
- ImportError: No module named ‘mathss’
- AttributeError:‘str’ object has no attribute’abc’
3、显式地引发异常: - raise通过raise显式地引发异常,一旦执行raise语句,raise后面的语句将不能执行。
- raise例:
def my(number):
if number<1:
raise Exception("Invalid number!",number)#强制触发异常,并传入两个参数
#触发异常后不执行后面的代码
my(-2)
#运行结果:
Traceback (most recent call last):
File "D:\python\a.py", line 53, in <module>
my(-2)
File "D:\python\a.py", line 51, in my
raise Exception("Invalid number",number)#强制触发异常,并传入两个参数
Exception: ('Invalid number', -2)
4、断言:手动引发异常:
assert语句用于检测某个条件表达式是否为真。assert语句又称为断言语句,assert认为检测的表达式永远为真,if语句中的条件判断都可以使用assert语句检测。
assert “mode” in [ “train”,“eval”,“inderence”]
注意:如果"mode"不在其中,则触发异常。
#断言:在特定情况下触发执行某个错误
name='sunshine'
assert name == 'sunshine',NameError("用户名不正确")
age=20
class AgeError(Exception):
"""docsrting for ClassName"""
pass
age=17
if age <18:
raise AgeError("您的年龄太小了,")