Python try except,执行except语句后再试
Python try except, try again after executing except statement
我正在尝试执行一条语句,但如果它失败了,我想执行 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')
这是 'proper' 解决这个问题的方法吗?
要回答标题中的问题,您可以递归地这样做:
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)
因为 python3.2
os.makedirs
有可选的 exist_ok
参数,默认情况下是 False
。当设置 True
和 os.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')
我正在尝试执行一条语句,但如果它失败了,我想执行 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')
这是 'proper' 解决这个问题的方法吗?
要回答标题中的问题,您可以递归地这样做:
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)
因为 python3.2
os.makedirs
有可选的 exist_ok
参数,默认情况下是 False
。当设置 True
和 os.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')