您当前的位置:首页 > 互联网教程

上下文管理器之contextlib模块

发布时间:2025-05-17 06:13:34    发布人:远客网络

上下文管理器之contextlib模块

一、上下文管理器之contextlib模块

1.模块简介

上下文管理器就是允许你可以自动地开始和结束一些事情。最常用的场景就是打开文件、写入内容、关闭文件了。当你使用with语句时,python会自动创建一个上下文管理器。

上下文管理器就是允许你可以自动地开始和结束一些事情。最常用的场景就是打开文件、写入内容、关闭文件了。当你使用with语句时,python会自动创建一个上下文管理器。

上下文管理器背后的工作机制是采用python的方法:enter和exit。

这里创建一个数据库操作的类,传入数据库路径后,将自动执行enter()方法,为我们创建一个数据库对象。当结束数据库操作准备退出时, exit()会自动执行关闭这个链接

一旦代码运行完毕,该类就会将事件关闭。

这里在closing中访问百度首页,当访问结束后,指向该页面的句柄就会自动关闭

suppress类的作用主要是为了禁止任意数目的异常。比如我们想要忽略FileNotFoundError异常,普通的with语句就会报错

如果要使得程序忽略这个异常,可以按照如下的方式进行:

该类主要是用于标准输出重定向,举例如下:

该类主要是用于标准错误重定向,举例如下:

大部分情况下创建的上下文管理器之只能使用一次,没法进行多次调用。

如果我们需要让其成为可以重用的上下文管理器,需要结合redirect_stdout进行操作

这里我们创建了一个上下文管理器,他们都向StringIO中写入数据。由于redirect_stdout可重用,所以这段代码没有抛出异常。但是这种可以重用的上下文管理器不一定是线程安全的。如果线程中要使用,需要结合具体情景再做处理。

二、python安装包找不到setup

安装python库时具体怎样怎样执行pythonsetup.pyinstall

现进入CMD,然后输入DOS命令进入setup.py文件所在目录,然后输入pythonsetup.pyinstall就搞定了。

现进入CMD,然后输入DOS命令进入setup.py文件所在目录,然后输入pythonsetup.pyinstall就搞定了。

主要是要知道哪里出现问题了啊,点logfile看问题出在哪。比如说看操作系统是否匹配,3.7.3仅支持WindowsVista和更新的操作系统版本,不支持XP,如果需要在WindowsXP装的话,只能安装Python3.4及之前版本。只有知道问题在哪,才好出谋划策。

Django安装输入pythonsetup.pyinstall无效

setup.py文件没有在当前目录下,cd到解压目录下安装,

setup.py文件没有在当前目录下,cd到解压目录下安装,

另外安装django的方法有好几种,下载easy_install或者pip工具

看情况是你的安装包不完整。少了些内容。

shared.dc.zrdb.tm这个包从命名规则上看是一个习惯在windows下编程的人做的。unix和python都是对大小敏感的。所以为了程序的移植性,通常都不使用大小写来命名。

从内容上看,似乎是一个WEB的爬行器,有一个大的URL库,其中库有可能是从网上下载使用的。

所以你可以尝试从网上重新下载完整的安装包。或者是旧的安装包。旧的安装包里也许有这个文件,先安装旧的。再安装新的也许就没有问题了。

著作权归作者所有,转载请联系作者获得授权。

刚试了下pipuninstall是可以的,但是相关的依赖包不会自动删除。

[root@nessus~]#pipinstallhttpie

Retrying(Retry(total=4,connect=None,read=None,redirect=None))afterconnectionbrokenby'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org',port=443):Readtimedout.(readtimeout=15)",)':/simple/httpie/

Retrying(Retry(total=3,connect=None,read=None,redirect=None))afterconnectionbrokenby'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org',port=443):Readtimedout.(readtimeout=15)",)':/simple/httpie/

Downloadinghttpie-0.9.2-py2.py3-none-any.whl(66kB)

100%|████████████████████████████████|69kB325kB/s

Collectingrequests=2.3.0(fromhttpie)

Downloadingrequests-2.8.1-py2.py3-none-any.whl(497kB)

100%|████████████████████████████████|499kB618kB/s

CollectingPygments=1.5(fromhttpie)

DownloadingPygments-2.0.2-py2-none-any.whl(672kB)

100%|████████████████████████████████|675kB338kB/s

Installingcollectedpackages:requests,Pygments,httpie

SuccessfullyinstalledPygments-2.0.2httpie-0.9.2requests-2.8.1

[root@nessuspip_test]#pipuninstallhttpie

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/DESCRIPTION.rst

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/METADATA

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/RECORD

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/WHEEL

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/entry_points.txt

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/metadata.json

/usr/local/lib/python2.7/site-packages/httpie-0.9.2.dist-info/top_level.txt

/usr/local/lib/python2.7/site-packages/httpie/__init__.py

/usr/local/lib/python2.7/site-packages/httpie/__init__.pyc

/usr/local/lib/python2.7/site-packages/httpie/__main__.py

/usr/local/lib/python2.7/site-packages/httpie/__main__.pyc

/usr/local/lib/python2.7/site-packages/httpie/cli.py

/usr/local/lib/python2.7/site-packages/httpie/cli.pyc

/usr/local/lib/python2.7/site-packages/httpie/client.py

/usr/local/lib/python2.7/site-packages/httpie/client.pyc

/usr/local/lib/python2.7/site-packages/httpie/compat.py

/usr/local/lib/python2.7/site-packages/httpie/compat.pyc

/usr/local/lib/python2.7/site-packages/httpie/config.py

/usr/local/lib/python2.7/site-packages/httpie/config.pyc

/usr/local/lib/python2.7/site-packages/httpie/context.py

/usr/local/lib/python2.7/site-packages/httpie/context.pyc

/usr/local/lib/python2.7/site-packages/httpie/core.py

/usr/local/lib/python2.7/site-packages/httpie/core.pyc

/usr/local/lib/python2.7/site-packages/httpie/downloads.py

/usr/local/lib/python2.7/site-packages/httpie/downloads.pyc

/usr/local/lib/python2.7/site-packages/httpie/input.py

/usr/local/lib/python2.7/site-packages/httpie/input.pyc

/usr/local/lib/python2.7/site-packages/httpie/models.py

/usr/local/lib/python2.7/site-packages/httpie/models.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/__init__.py

/usr/local/lib/python2.7/site-packages/httpie/output/__init__.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/__init__.py

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/__init__.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/colors.py

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/colors.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/headers.py

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/headers.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/json.py

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/json.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/xml.py

/usr/local/lib/python2.7/site-packages/httpie/output/formatters/xml.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/processing.py

/usr/local/lib/python2.7/site-packages/httpie/output/processing.pyc

/usr/local/lib/python2.7/site-packages/httpie/output/streams.py

/usr/local/lib/python2.7/site-packages/httpie/output/streams.pyc

/usr/local/lib/python2.7/site-packages/httpie/plugins/__init__.py

/usr/local/lib/python2.7/site-packages/httpie/plugins/__init__.pyc

/usr/local/lib/python2.7/site-packages/httpie/plugins/base.py

/usr/local/lib/python2.7/site-packages/httpie/plugins/base.pyc

/usr/local/lib/python2.7/site-packages/httpie/plugins/builtin.py

/usr/local/lib/python2.7/site-packages/httpie/plugins/builtin.pyc

/usr/local/lib/python2.7/site-packages/httpie/plugins/manager.py

/usr/local/lib/python2.7/site-packages/httpie/plugins/manager.pyc

/usr/local/lib/python2.7/site-packages/httpie/sessions.py

/usr/local/lib/python2.7/site-packages/httpie/sessions.pyc

/usr/local/lib/python2.7/site-packages/httpie/utils.py

/usr/local/lib/python2.7/site-packages/httpie/utils.pyc

Successfullyuninstalledhttpie-0.9.2

大多数库都可以通过pip安装,安装方法为,在命令行窗口输入

某些库通过pip安装不了,可能是因为没有打包上传到pypi中,可以下载安装包之后离线安装,方法是

libpath为本地安装包地址,这些安装包一般以whl为后缀名。表示python扩展包的windows环境下的二进制文件。

有一个专门下载这种文件的地方,是由加利福尼亚大学的师生为方便python用户使用而建立的,并非官方出品,使用时需自行承担风险。

如果下载下来的安装包为带有源文件的压缩包,解压之后,运行setup.py进行安装,方法是

命令行切换到安装包中setup.py文件所在的目录,执行pythonsetup.pyinstall

有些类库提供了双击运行直接安装的安装包,比如python连接mysql数据库的驱动mysql-connector-python

这些安装包的后缀名为msi或者exe。下载下来之后,双击运行之后就安装好了,前提是要根据python的版本及windows的位数下载对应的安装包,否则安装过程会报错或者直接提示无法安装。

三、专家推荐一文搞懂Python上下文管理器

1、我们在处理文件的时候经常看到下面这样的代码,它即是上下文管理器:

2、它的含义是打开当前目录下的text.txt文件并打印它里面的内容,与下面的代码效果是一样的:

3、对比两种写法能够发现,使用 with自动执行了 f.close()(关闭文件)的这步操作,能够少写一点代码。

4、那这样的上下文管理器是怎么实现的,下面为你讲解。

5、如果要实现上面 open上下文管理器功能,我们可以通过创建一个类,并添加 __enter__和 __exit__方法即可,如下面的代码所示:

6、可以看到在我们打印出文件的内容后,自动执行了关闭文件的操作。

7、那 __enter__和 __exit__的含义是什么, __exit__后面的 exc_type, exc_val, exc_tb又是什么意思呢?

8、 __exit__是在with执行完成后自动执行的,他后面的参数含义如下:

9、当with中执行的代码报错时,除了不继续执行with包含的代码外,还会将报错信息放入上面的三个参数中,例如下面的代码:

10、 Python内置了 contextlib这个模块用于实现上下文管理功能,它是通过生成器 yield实现的,这个模块让我们不必再创建类和__enter__和__exit__了。

11、通过 contextlib实现open功能的代码如下: