为什么 except 不能捕获 FileExistsError 错误 python

问题描述 投票:0回答:2

我正在尝试创建一个带有“x”(与打开一起使用)的文件,以便稍后将数据放入其中,我围绕着一个尝试并抓住了它。但是,它似乎不起作用并且仍然会抛出文件存在错误,即使存在异常也是如此。我什至把具体的错误放在那里。

try:
    with open("apikey.txt", "x") as f:
        ...
except FileExistsError:
    with open("apikey.txt", "r") as f:
       ...

这是下面的错误

FileExistsError: [Errno 17] File exists: 'apikey.txt'

python file-handling try-except
2个回答
0
投票

except
块没有捕捉到
FileExistsError
的原因是错误没有在
with
块内引发。当您尝试使用
FileExistsError
模式创建文件并且该文件已经存在时,
ope
"x"
n 函数引发。

在您的代码中,

with
块在
try
块内,因此如果
open
函数引发
FileExistsError
,with 块根本不会执行,代码直接跳转到
except
堵塞。换句话说,错误没有在
with
块内引发,所以
except
块没有捕捉到它。

要解决此问题,您可以将 try 块移动到 with 块内,如下所示:

try:
    with open("apikey.txt", "x") as f:
        # Do something with the file here
except FileExistsError:
    with open("apikey.txt", "r") as f:
        # Do something with the existing file here

这样,如果

open
函数引发
FileExistsError
,代码将跳转到
except
块,您可以在其中打开现有文件进行阅读。如果
open
函数成功,
with
块将被执行,你可以对新文件做一些事情。

请注意,如果您想要覆盖已存在的文件,也可以使用

"w"
模式而不是
"x"
模式。在这种情况下,您根本不需要
try
块,因为
open
函数将始终成功。

-n


-1
投票

信息有限。也许您在 except 语句中使用了错误的错误。 试试这个来测试:

try:
    with open("apikey.txt", "x") as f:
        ...
except:
    with open("apikey.txt", "r") as f:
       ...
© www.soinside.com 2019 - 2024. All rights reserved.