【问题标题】:python3 gspread exception not caughtpython3 gspread异常未捕获
【发布时间】:2018-08-30 23:19:21
【问题描述】:

我有以下代码尝试捕获 gspread.exceptions.APIError,通常是由于 Google 电子表格凭据超时造成的。 _open_sheet 请求一组新的凭据。

def _findRow(self, entry):
''' Return row index for row which contains "entry". '''
for i in range(10):
    try:
        cell = self.worksheet.find(email)
        return cell.row
    except gspread.exceptions.CellNotFound:
        return None
    except gspread.exceptions.APIError:
        # This occurs when we get a timeout of the authentication token
        # Need to reauthenticate
        self._open_sheet()
        continue
print('Leadsheet:find:: Failed to renew authorization after 10 attempts.')
return None

并且从以下堆栈跟踪中未捕获 gspread.exceptions.APIError:

Traceback (most recent call last): 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app 
    response = self.full_dispatch_request() 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise 
    raise value 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request 
    rv = self.dispatch_request() 
  File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
  File "/app/app/api_1_0/views.py", line 79, in lead 
    statSheet.updateStats(config.leadsheetTile) 
  File "/app/app/statSheet.py", line 71, in updateStats 
    row = self._findRow(entry) 
  File "/app/app/statSheet.py", line 54, in _findRow 
    cell = self.worksheet.find(entry) 
  File "/app/.heroku/python/lib/python3.6/site-packages/gspread/models.py", line 805, in find 
    return self._finder(finditem, query) 
  File "/app/.heroku/python/lib/python3.6/site-packages/gspread/models.py", line 779, in _finder 
    data = self.spreadsheet.values_get(self.title) 
  File "/app/.heroku/python/lib/python3.6/site-packages/gspread/models.py", line 110, in values_get 
    r = self.client.request('get', url, params=params) 
  File "/app/.heroku/python/lib/python3.6/site-packages/gspread/client.py", line 79, in request 
    raise APIError(response) 
gspread.exceptions.APIError: { 
  "error": { 
    "code": 401, 
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", 
    "status": "UNAUTHENTICATED" 
  } 
} 

关于这段代码发生了什么的任何线索?

【问题讨论】:

    标签: python python-3.x gspread


    【解决方案1】:

    我遇到了同样的问题,但有效的是:

    except gspread.CellNotFound:
    

    【讨论】:

      【解决方案2】:

      在出现此错误一段时间后,我在 Excel 表中写入数据时也会发生同样的情况。 一旦我再次运行我的脚本,它就可以正常工作,但一段时间后会失败。

      观察到的一件事是在写入数据时,如果它到达该表中行的末尾并且没有其他行要写入,那么它就会开始抛出这样的错误。

      所以你需要像下面这样捕获这个异常:

          try:
              Sheet.update_cell(row, column, value="What ever value")t_term)
          except gspread.exceptions.APIError as UNAUTHENTICATED:
              print("Api error occurred for gspread due to authentication failure while writing What ever value.")
      

      【讨论】:

        猜你喜欢
        • 2010-09-28
        • 2012-05-31
        • 1970-01-01
        • 2014-04-10
        相关资源
        最近更新 更多