我正遇到异常similar to this one,并且我正在尝试根据错误本身来处理它。
问题是pyhive.exc.OperationalError
非常通用,可以处理从超时到不存在的表的错误,因此我需要errorMessage
部分中的确切值才能以不同方式处理每种错误类型,例如超时,等待重试;如果还有其他问题,请以其他方式处理,依此类推。
如果我发现错误为except OperationalError as e
,我该如何提取errorMessage
部分?我可以解析字符串表示形式(e.__str__()
),但这听起来很奇怪,因为我确定有正确的方法。
答案 0 :(得分:1)
如果您看到实现hive Exception implementation,它只是继承了Exception
,因此它具有字符串格式的异常详细信息,看起来像json
,实际上使我们感到困惑,我们希望使用实例变量或作为字典对其进行访问,但实际上,它只是类似于json
的字符串。
但是我们可以使用reguler表达式来提取细节,例如errortype
等。
答案 1 :(得分:1)
我找到了另一种方法,这似乎是一种更好的方法。
try:
return presto.execute_query_safe(query, bind_params)
except pyhive.exc.DatabaseError as e:
logging.error("Query failed", exc_info=1)
if error.args[0]['errorName'] == 'SYNTAX_ERROR' or error.args[0]['errorType'] == 'USER_ERROR':
raise NonRecoverableQueryError('Non Recoverable Error: ' + str(error))
raise e