Python try-except,在执行except语句后重试



我正在尝试执行一条语句,但如果失败,我想执行except语句,之后我想执行重试。我知道我可以使用循环,但我正在寻找一个更优雅的解决方案。

在我的用例中,我试图将文件保存到文件夹中,但如果收到FileNotFoundError,我想在except中创建文件夹,然后转到重试。

from pathlib import Path
import os
folder = Path('folder')
df = [a,b,c]
try:
df.to_feather(folder / 'abc.ftr')
except:
os.makedirs(folder)
df.to_feather(folder / 'abc.ftr')

但在这种情况下,我将重复df.to_feather(folder / 'abc.ftr')的声明。如果语句变大,这会很烦人,我想避免为此构建函数。

另一种方式可能是:

if folder not in os.listdir():
os.makedirs(folder)
df.to_feather(folder / 'abc.ftr')

这是解决这个问题的"正确"方法吗?

由于python3.2os.makedirs具有可选的exist_ok参数,默认情况下为False。当集合Trueos.makedirs被指示创建已经存在的目录时,没有操作。因此代替

if folder not in os.listdir():
os.makedirs(folder)
df.to_feather(folder / 'abc.ftr')

你可以直接做

os.makedirs(folder, exist_ok=True)
df.to_feather(folder / 'abc.ftr')

要回答标题中的问题,可以递归地执行以下操作:

def do_stuff(x):
try:
stuff(x)
except SpecificException:
other_stuff(x)
do_stuff(x)

如果你想创建一个文件,你可以使用:

pathlib.Path('/tmp/sub1/sub2').mkdir(parents=True, exist_ok=True)

最新更新