我正在尝试创建一个带有“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'
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
信息有限。也许您在 except 语句中使用了错误的错误。 试试这个来测试:
try:
with open("apikey.txt", "x") as f:
...
except:
with open("apikey.txt", "r") as f:
...