在Python中集成异常处理'

时间:2014-11-14 17:19:33

标签: python exception-handling

打开文件并阅读其内容的简单方法是使用with

with open ('file.txt', "r") as filehandle:
    contents = filehandle.read()

但是,这不包括以try/except的方式排除文件打开错误:

try:
    filehandle = open('file.txt', 'r')
    contents = filehandle.read()
except IOError:
    print('There was an error opening the file!')
    sys.exit()

是否有一种方法可以在with语句中集成失败消息,以便在开放失败的情况下优先退出,这将在比第二个示例更少的代码行中完成但提供相同的功能?如果不是这样,有没有比第二种形式更优雅(或极简主义)的东西?

1 个答案:

答案 0 :(得分:0)

from contextlib import contextmanager

@contextmanager
def safe_open(fname,mode):
    try:
        fh = open(fname,mode)
    except IOError:
        print "ERROR OPENING FILE :",fname
        sys.exit()
    else:
        yield fh
        try:
            fh.close()
        except:
            pass


with safe_open("nofile","rb") as f:
    f.write("blah")

我不确定它更优雅但是...... ...