python - 我应该如何从 with 语句返回有趣的值?

标签 python with-statement contextmanager

有没有比使用全局变量更好的方法从上下文管理器中获取有趣的值?

@contextmanager
def transaction():
    global successCount
    global errorCount
    try:
        yield
    except:
        storage.store.rollback()
        errorCount += 1
    else:
        storage.store.commit()
        successCount += 1

其他可能性:

  • 单例

    某种全局...

  • 元组作为上下文管理器的参数

    使函数更具体地解决问题/减少可重用

  • 将特定属性保存为上下文管理器参数的实例

    与元组相同的问题,但更易读

  • 在保存值的上下文管理器末尾引发异常。

    真是个坏主意

最佳答案

参见 http://docs.python.org/reference/datamodel.html#context-managers

创建一个保存成功和错误计数的类,并实现 __enter____exit__ 方法。

关于python - 我应该如何从 with 语句返回有趣的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877709/

相关文章:

python - 想广泛了解Python中索引的用法

python:有没有办法在with语句中获取代码

python - 如何制作一个像字符串一样的类?

sql-server - 递归顺序 (SQL Server CTE)

python - 为什么生成器不是上下文管理器?

为类拥有的对象组合上下文管理器的 Pythonic 方法

python - Python 对数下降曲线上的梯度下降

python - readline() 只读取第一行

python - 如何从leastsq()返回的数据中获取雅可比矩阵?

具有上下文管理器的 Python mixin 无法正确解决 "super"调用