如何实现try-catch并获取扩展错误的名称和代码



我正在使用gspread模块从使用Python的谷歌表中读取东西。有时,我遇到了一个错误,我可以从Python控制台跟踪。

但是我希望我的Python代码来处理它,并告诉我尽可能多的细节,是什么导致错误。我想这应该使用try/catch来完成,但是我找不到任何例子来理解…

  • 如何从gspread获取关于gspread错误细节的信息,以及
  • 如何将其处理成字典,以便我可以自己打印出错误。
import gspread
try:
# do some stuff
except gspread.exceptions.APIError as e:
print("ERROR", e, type(e))
# what should I put in the previous lines to handle the exception
# and get the error details into a python variable, i.e. err
# print("Error {}: {}".format(err['code'], err['name']))
# print(" (raised by {} line {})".format(err['script'], err['line']))

当前输出(例如,如果我试图访问一个不是我的文件):

ERROR {
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "File not found: 1eIjkFBQmTo2TCr7hf4HFItSsBQmGAT-t3ZXH1LlEmNk",
"locationType": "other",
"location": "file"
}
],
"code": 404,
"message": "File not found: 1eIjkFBQmTo2TCr7hf4HFItSsBQmGAT-t3ZXH1LlEmNk"
}
}
<class 'gspread.exceptions.APIError'>

主要我关注的是将错误代码和错误名称/描述放入变量(字典,列表或其他)……我不在乎)。

但如果我也能拿到剧本&我的代码中产生错误的那行,那将是伟大的。

似乎所有的gspread错误信息都作为json字符串返回,所以我的问题是知道如何解析它以访问其元素:

import gspread
try:
# do some stuff
except gspread.exceptions.APIError as e:
import json,os
ej = json.loads(str(e))["error"]
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
err = {'code':ej['code'], 'message':ej['message'],'script':fname, 'line':exc_tb.tb_lineno}
print("Error {}: {}".format(err['code'], err['message']))
print(" (raised by {} line {})".format(err['script'], err['line']))

感谢@Tomerikoo提供的有关文件和行信息的链接。

就是这样!

希望@Burnash (gspread开发人员)可以告诉我们是否有更直接的方法来获取错误代码&消息。

相关内容

  • 没有找到相关文章