【发布时间】:2023-01-28 00:27:30
【问题描述】:
我已经尝试编写一个 Python 上下文管理器,它可以安全地打开文件进行读取并优雅地处理 FileNotFound 错误。这是我的代码:
filename = 'my_file.txt'
class SafeRead:
def __init__(self,fname):
self.filename = fname
def __enter__(self):
try:
self.file_handle = open(self.filename,'r')
except Exception as e:
self.file_handle = None
print(e)
return self.file_handle
def __exit__(self,e_type,e_val,e_trace):
if self.file_handle:
self.file_handle.close()
with SafeRead(filename) as f:
if f: data = f.read()
但是,我觉得结果很笨拙,尤其是对正文中的文件对象进行了额外的测试,以在尝试访问未定义的文件句柄时抑制额外的异常。有没有更好的办法?
【问题讨论】:
-
它有效吗? Code Review。
-
您如何处理此异常没有什么优雅之处。您刚刚将处理异常的需要替换为检查
f的值的需要。这是较少的比以前安全。 -
真正“安全”的读取将提供一个合适的类文件对象来代替
None。也许f.read()返回一个空字符串,但也许my_file.txt也是如此。 -
谢谢 @chepner 缺少 if f: 子句并且无法弄清楚它是如何工作的:您刚刚将处理异常的需要替换为检查 f 的值的需要。这比以前更不安全
标签: python error-handling