Python / PyHive - извлечь конкретное сообщение об ошибке из исключения - PullRequest
0 голосов
/ 18 сентября 2018

Я сталкиваюсь с исключением , похожим на это , и я пытаюсь справиться с ним на основе самой ошибки.Проблема в том, что pyhive.exc.OperationalError является очень общим и обрабатывает ошибки от тайм-аутов до несуществующих таблиц, поэтому мне нужно точное значение из части errorMessage, чтобы по-разному обрабатывать каждый тип ошибки, например, если это тайм-аут, ожидание иповторить попытку;если это что-то другое, обращайтесь с этим по-другому и так далее.

Если я поймаю ошибку как except OperationalError as e, как мне извлечь часть errorMessageмог бы разобрать строковое представление (e.__str__()), но это кажется странным, так как я уверен, что есть правильный путь.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Я нашел другой способ сделать это, который может показаться намного лучшим способом.

 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
0 голосов
/ 12 июня 2019

Если вы видите реализацию hive Exception реализацию , она просто унаследовала Exception Так что у нее есть подробности исключений в формате только строки, которые выглядят как json, которые на самом деле нас смущают, и мы надеемся, чтополучить доступ к нему, используя переменную экземпляра или как словарь, но на самом деле это просто строка, которая выглядит как json.

Но мы можем использовать выражение регулятора для извлечения деталей, как мы хотим, например errortype и т. д.

...