self._module_name = native_bt.error_cause_get_module_name(ptr)
self._file_name = native_bt.error_cause_get_file_name(ptr)
self._line_number = native_bt.error_cause_get_line_number(ptr)
+ self._str = native_bt.bt2_format_bt_error_cause(ptr)
def __str__(self):
- s = '[{}] ({}:{})\n'.format(self.module_name, self.file_name, self.line_number)
- s += self.message
- return s
+ return self._str
@property
def message(self):
the ERROR or MEMORY_ERROR status codes.
"""
- def __init__(self, msg, ptr=None):
+ def __init__(self, msg):
super().__init__(msg)
# Steal the current thread's error.
self._ptr = native_bt.current_thread_take_error()
assert self._ptr is not None
self._msg = msg
+ self._str = msg + '\n' + native_bt.bt2_format_bt_error(self._ptr)
# Read everything we might need from the error pointer, so we don't
# depend on it. It's possible for the user to keep an Error object
return len(self._causes)
def __str__(self):
- s = self._msg + '\n'
- for c in self:
- s += str(c) + '\n'
- return s
+ return self._str