异常
异常捕获
try:
myfile = open('1.txt')
except Exception:
print('打开文件错误')
else:
print('打开文件')
myfile.close()
finally:
print('打开文件结束')
class MyError(Exception):
print('自定义错误')
def func():
raise MyError('错误')
func()
assert 1 == 0
with open('1.txt') as myfile:
for var in myfile:
print(var)
pickle 模块
import pickle
mylist = [1,2,3]
# 把数据转化为二进制
obj = pickle.dumps(mylist)
# 二进制转化为数据
obj2 = pickle.loads(obj)
# [1,2,3]
print(obj2)
import pickle
# 写
mylist = [1,2,3]
myfile = open('1.txt','wb+')
pickle.dump(mylist,myfile)
myfile.close()
# 读
myfile = open('1.txt','rb')
obj = pickle.load(myfile)
# [1,2,3]
print(obj)
闭包
- 目的:内部函数继承外部函数中的变量,维持数据的状态,延长变量的生命周期,变量私有化
def outfunc(num):
def infunc(num1):
print(num + num1)
# 闭包:返回内部函数
return infunc
func = outfunc(10)
func(20)
func(30)
func1 = outfunc(10)
func1(40)
func1(50)
装饰器
- 原理:闭包函数
- 目的:在不修改函数的情况下,为函数扩充功能
- 装饰函数模型
def _func(func):
def _func1():
return func()
return _func1
# 定义装饰器
def func1(func):
# 闭包:变量 → 函数
def add_func():
print('添加的功能')
return func()
return add_func
# 用 func1 装饰 func2
@func1
def func2():
print('hello')
# 添加的功能
# hello
# func1(func2)()
func2()
# 定义一个装饰器
def func1(func):
def func2(x,y):
x = 1
y = 2
# 调用外部方法的参数方法,返回
return func(x,y)
# 返回内部方法
return func2
# 使用装饰器修饰方法
@func1
def func(x,y):
print(x + y)
# 3
func(10,20)
def arg_func(arg):
def _func(func):
def _func1():
if arg == 'good':
print('出去玩')
if arg == 'bad':
print('在家睡觉')
return func()
return _func1
return _func
@arg_func('good')
def func1():
print('good day')
@arg_func('bad')
def func2():
print('bad day')
# arg_func:装饰器只能接收函数作为参数
# arg_func → _func:接收装饰器的参数
# _func → _func1:闭包函数,添加功能
# _func1 → func:执行功能,执行被装饰的函数
爬虫
from urllib.request import *
import re
# 地址
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%98%9F%E7%A9%BA&oq=xingk&rsp=0'
# 打开一个网页
html = urlopen(url)
# 获取 html 代码
obj = html.read().decode()
# 正则匹配:. → 任意字符、* → 任意次、? → 非贪婪(每个地址作为整体)
urls = re.findall(r'"objURL":"(.*?)"',obj)
# 下载
index = 0
for var in urls:
try:
print('downloading...%d' % index)
if re.search('.jpg$',var):
urlretrieve(var,'pic' + str(index) + '.jpg')
index += 1
if re.search('.png$',var):
urlretrieve(var,'pic' + str(index) + '.png')
index += 1
if re.search('.gif$',var):
urlretrieve(var,'pic' + str(index) + '.gif')
index += 1
except Exception:
print('download error...%d' % index)
finally:
print('download complete')