Как уже говорилось, для платформы Windows не существует способа поставщика Microsoft / компилятора. Однако, очевидно, полезно поймать эти типы исключений в обычном try {} catch (исключение ex) {} для сообщения об ошибках и более изящном выходе вашего приложения (как говорит JaredPar, теперь приложение, вероятно, находится в беде) , Мы используем _se_translator_function в простой оболочке класса, которая позволяет нам улавливать следующие исключения в aa try-обработчике:
DECLARE_EXCEPTION_CLASS(datatype_misalignment)
DECLARE_EXCEPTION_CLASS(breakpoint)
DECLARE_EXCEPTION_CLASS(single_step)
DECLARE_EXCEPTION_CLASS(array_bounds_exceeded)
DECLARE_EXCEPTION_CLASS(flt_denormal_operand)
DECLARE_EXCEPTION_CLASS(flt_divide_by_zero)
DECLARE_EXCEPTION_CLASS(flt_inexact_result)
DECLARE_EXCEPTION_CLASS(flt_invalid_operation)
DECLARE_EXCEPTION_CLASS(flt_overflow)
DECLARE_EXCEPTION_CLASS(flt_stack_check)
DECLARE_EXCEPTION_CLASS(flt_underflow)
DECLARE_EXCEPTION_CLASS(int_divide_by_zero)
DECLARE_EXCEPTION_CLASS(int_overflow)
DECLARE_EXCEPTION_CLASS(priv_instruction)
DECLARE_EXCEPTION_CLASS(in_page_error)
DECLARE_EXCEPTION_CLASS(illegal_instruction)
DECLARE_EXCEPTION_CLASS(noncontinuable_exception)
DECLARE_EXCEPTION_CLASS(stack_overflow)
DECLARE_EXCEPTION_CLASS(invalid_disposition)
DECLARE_EXCEPTION_CLASS(guard_page)
DECLARE_EXCEPTION_CLASS(invalid_handle)
DECLARE_EXCEPTION_CLASS(microsoft_cpp)
Оригинальный класс исходил из этой очень полезной статьи:
Вы можете кэшировать ответ API в атрибуте экземпляра, который инициализирован как None
, так что метод свойства data
будет получать данные только из API, если атрибут кэширования равен None
:
class Thing:
def __init__(self, id):
self.id = id
self._data = None
@property
def data(self):
if self._data is None:
self._data = self._get_data_from_api()
return self._data
def _get_data_from_api(self):
return requests.get(url, headers).json()