gpt4 book ai didi

python - 大多数 pythonic 方式尝试,除了,并重试一次

转载 作者:行者123 更新时间:2023-12-05 07:17:21 24 4
gpt4 key购买 nike

我正在寻找尝试命令的最 pythonic 方式,如果发生错误则捕获并通过运行预备命令然后运行原始命令重试。特别是在我的例子中,我希望将一个表写入数据库,如果抛出“模式不存在”错误则捕获,然后尝试创建一个模式并重试写入表。然后,如果写表再次出错,我不想捕获它。

到目前为止,我已经(示意性地):

try:
write_to_table(table, schema)
except sqlalchemy.exc.ProgrammingError:
create_schema(schema)
write_to_table(table, schema)

这是我想要的,但似乎有点不对劲,可能是因为我在复制 write_to_table()。

那么,执行上述操作最符合 Python 风格的方法是什么?

附言当我说我想重试时,我不想这样:How to retry after exception?

最佳答案

只需创建一个可重用的装饰器!!

def retry(func):
'''
Decorator.
If the decorated function fails with an exception
calls it again after a random interval.
'''
def _retry(*args,**kwargs):
max_retries = 1
for i in range(max_retries):
try:
value = func(*args,**kwargs)
return value
except sqlalchemy.exc.ProgrammingError as e:
print('function:[{}({},{})] Failed with error: {} . Retrying...'.format(func.__name__,str(*args),str(kwargs),str(e)))
time.sleep(random.uniform(1,3))
print("Max_retries({}) exceeded for function {}".format(max_retries,func.__name__))
return _retry

通过使用上述装饰器,您还可以在其中配置重试次数和重试间隔,您可以执行以下操作:

@retry
write_to_table(table, schema)

关于python - 大多数 pythonic 方式尝试,除了,并重试一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com