【问题标题】:Python control "with" context manager with conditional带有条件的 Python 控制“with”上下文管理器
【发布时间】:2019-05-07 16:26:00
【问题描述】:

Python2.7 可以使用条件来控制“with”上下文管理器吗?我的场景是,如果一个 gzip 文件存在,我想追加到它,如果它不存在,我想写入一个新文件。伪代码为:

with gzip.open(outfile, 'a+') if os.isfile(outfile) else with open(outfile, 'w') as outhandle:

或者……

if os.isfile(outfile):
    with gzip.open(outfile, 'a+') as outhandle:
        # do stuff
else:
    with open(outfile, 'w') as outhandle:
        # do the same stuff

我不想重复“做事”,因为它们之间是一样的。但是如何使用条件来控制 with 上下文?

【问题讨论】:

标签: python python-2.7 conditional-statements with-statement


【解决方案1】:

记住函数也可以赋值给变量

if os.isfile(outfile):
    open_function = gzip.open
    mode = 'a+'
else:
    open_function = open
    mode = 'w'

with open_function(outfile, mode) as outhandle:
    # do stuff

【讨论】:

    【解决方案2】:

    您可以尝试为“做事”编写一个函数

    def do_stuff():
        #do stuff here 
    
    if os.isfile(outfile):
        with gzip.open(outfile, 'a+') as outhandle:
            do_stuff()
    else:
        with open(outfile, 'w') as outhandle:
            do_stuff()
    

    【讨论】:

    • 好点,我在其他地方也做过。但我想知道是否有办法在 with 语句中做到这一点。
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多