Python中如何处理open file的异常?

代码如下, 该 hhm.html 已经被锁定是没权限读取的:

f = open('c:\\hhh.html')
try:
    f.read(4)
except:
    print('error')
finally:
    f.close()
print('done')

我希望 python 不要报错,而是能继续走下去执行到 print('done') 这一行


Python中如何处理open file的异常?
16 回复

没读取权限的话,可能 open 就会出错了


try:
    with open('example.txt', 'r') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("文件不存在,请检查路径")
except PermissionError:
    print("没有文件访问权限")
except IsADirectoryError:
    print("指定路径是目录而非文件")
except UnicodeDecodeError:
    print("文件编码错误")
except OSError as e:
    print(f"操作系统错误: {e}")
except Exception as e:
    print(f"其他错误: {e}")

核心就三点:

  1. try-except包裹文件操作,捕获可能的各种异常
  2. 优先用with语句,它能自动处理文件关闭,避免资源泄漏
  3. 具体异常具体处理,别只写个笼统的except Exception

比如FileNotFoundError最常见,文件不存在时触发;PermissionError是没权限;UnicodeDecodeError是编码问题。按需捕获就行。

简单说就是:用with语句加异常捕获,稳得很。

with open(file) as f

没有读的权限,我就晓得,把 try 放最上面。

with open(file) as f 也一样报错,用 try except 包起来倒是 ok,可是这样的话感觉好丑,每个文件读取都要这样啊

···
try:
with open(‘r:\hhh.html’) as f:
f.read(4)
except:
print(‘error’)
print(‘done’)
···

顺便问下,为什么 V2EX 回复主题的时候不能用 markdown 啊

你写成个函数不就可以了,为啥回复不能添加表情。。·_·

文件内部读取规则每个文件都不一样啊。

这是不对的,权限的改变可以发生在判断之后、打开之前。

唯一正确的方法就是尝试打开文件,然后处理失败的情况。

你确定你看了官方文档?

哦哦,抱歉,理解错了 orz

open 也放到 try 里面啊,不明白问的点是什么

你确定你编译过么。。。。

虽然文档说的是我的意思,但是这个知识并不需要一个具体的文档……几乎所有的操作系统里面都是这样的。

受教了

回到顶部