Python标准库--contextlib模块

contextlib模块:上下文管理器工具

简单实现with...as...

as是__enter__返回的对象

__exit__返回True,则不抛出异常,返回False,则抛出异常

class WithinContext:
    def __init__(self, context):
        print(‘Within.__init__: ‘, context)

    def do_something(self):
        print(‘Within.do_something‘)
        raise RuntimeError(‘error message‘)

    def __del__(self):
        print(‘Within.__del__‘)

class Context:
    def __init__(self, handle_error):
        print(‘Contexxt.__init__(%s)‘ % handle_error)
        self.handle_error =handle_error

    def __enter__(self):
        print(‘Within.__enter__‘)
        return WithinContext(self)

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(‘Within.__exit__‘)
        print(‘   exc_type:‘,exc_type)
        print(‘   exc_val:‘, exc_val)
        print(‘   exc_tb:‘, exc_tb)
        return self.handle_error

with Context(True) as c:
    c.do_something()
with Context(False) as c:    c.do_something()

@contextlib.contextmanager

@contextlib.contextmanager
def make_context():
    print(‘  entering‘)
    try:
        yield {}
    except RuntimeError as e:
        print(‘  ERROR:‘, e)
    finally:
        print(‘  exiting‘)

with make_context() as value:
    print(‘  inside with statement:‘, value)
    # raise RuntimeError(‘showing RuntimeError‘)
    raise ValueError(‘this is not handled‘)

嵌套上下文

@contextlib.contextmanager
def make_context(name):
    print(‘  entering: ‘, name)
    try:
        yield name
    except RuntimeError as e:
        print(‘  ERROR:‘, e)
    finally:
        print(‘  exiting: ‘, name)

with make_context(‘A‘) as A, make_context(‘B‘) as B:
    print(‘  inside with statement:‘, A, B)

closing() 管理有close()的遗留类

class Door:
    def __init__(self):
        print(‘  __init__‘)

    def close(self):
        print(‘  close()‘)

try:
    with contextlib.closing(Door()) as d:
        print(‘  raising inside with‘)
        raise RuntimeError(‘error message‘)
except Exception as e:
    print(‘ had an error:‘, e)
时间: 2024-10-08 02:09:09

Python标准库--contextlib模块的相关文章

Python 标准库 ConfigParser 模块 的使用

Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import sys config = ConfigParser.ConfigParser() #写入 config.add_section("Inc_basic") config.set("Inc_basic","name","iPIN")

[python标准库]XML模块

1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息. XML有以下几个特点. XML的设计宗旨是传输数据,而非显示数据. XML标签没有被预定义.您需要自行定义标签. XML被设计为具有自我描述性. XML是W3C的推荐标准. 其解析流程如下图: 2.常用解析XML的Python包 Python的标准库中,提供了6种

【python】Python标准库defaultdict模块

来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会带来很多的便利,多看看很有好处. defaultdict是其中一个方法,就是给字典value元素添加默认类型,之前看到过但是没注意怎么使用,今天特地瞅了瞅. 首先是各大文章介绍的第一个例子: 代码如下: import collections as coll def default_factory()

Python标准库--os模块

这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. 下面列出了一些在os模块中比较有用的部分.它们中的大多数都简单明了. os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd()函数得到当前工作

[python标准库]Logging模块

1.模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出: 模块提供logger,handler,filter,formatter. logger

Python——标准库 Sys模块

------------------------------------------------------------------------------------------------------ sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. ---------------------------------------------------

[python标准库]Time模块

在python中,通常有以下几种方式来表示时间: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 格式化时间:struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 字符串时间:xxx年xxx月xxxx日 import time s1 = time.localtime(23213123) # 将时间戳转化为结构化时间 s2 = time.mktime() # 将结构化时间转化为时间戳 s3 = time.str

Python标准库--re模块

re:正则表达式 __all__ = [ "match", "fullmatch", "search", "sub", "subn", "split", "findall", "finditer", "compile", "purge", "template", "escape&

Python标准库--functools模块

functools模块:管理函数的工具 partial对象:包装原函数,提供默认值 import functools # 原函数 def myfunc(a, b=2): """Docstring for myfunc().""" print(' called myfunc with:', a, b) return # 输出函数 def show_details(name, f, is_partial=False): print(name) pri