我正在尝试使用 tenacity 模块来避免APIError
来自 gspread 的频繁请求错误(s)。我了解坚韧使用装饰器的常见示例,但我想使用坚韧的Retrying()
功能,所以我可以让它重试 gspread 的电子表格单元格更新方法sheet.update_acell()
。
出于某种原因,使用重试sheet.update_acell()
实际上并没有“给”函数(或其他东西)的参数。然而,一个人为的多参数示例完美地工作。
我的代码(进口和谷歌 API 凭证除外):
# gspread authorization
gs_client = gspread.authorize(creds)
workbook = gs_client.open_by_key(sheet_key)
sheet = workbook.sheet1
ret = tenacity.Retrying(stop=tenacity.stop_after_attempt(30),
wait=tenacity.wait_exponential(multiplier=0.5, max=60))
# contrived example
def retry_example(arg0, arg1):
print(arg0, arg1)
ret.call(retry_example,'foo','bar') #works perfectly
# gspread example
ret.call(sheet.update_acell(),'A1',1) #doesn't work, the arguments aren't found
输出:
foo bar
Traceback (most recent call last):
File "c:/Users/.../tenacitytest.py", line 28, in <module>
ret.call(sheet.update_acell(),'A1',1)
TypeError: update_acell() missing 2 required positional arguments: 'label' and 'value'
运行 gspread 的东西没有韧性,所以我确信我的调用是update_acell()
正确的。
我觉得这可能与 gspreadupdate_acell()
是一种方法这一事实有关,不像example_func()
?任何帮助,将不胜感激。