From f71a10c5dd0523443b8854248fc622fffbb37120 Mon Sep 17 00:00:00 2001 From: Jon Soifer Date: Mon, 27 Jan 2020 16:58:11 -0600 Subject: [PATCH] properly extract error type from windows error message (#4780) Co-authored-by: Jon Soifer --- python/tvm/_ffi/base.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/python/tvm/_ffi/base.py b/python/tvm/_ffi/base.py index 716091e..cdcc131 100644 --- a/python/tvm/_ffi/base.py +++ b/python/tvm/_ffi/base.py @@ -194,13 +194,30 @@ def _find_error_type(line): ------- name : str The error name """ - end_pos = line.find(":") - if end_pos == -1: + if sys.platform == "win32": + # Stack traces aren't logged on Windows due to a DMLC limitation, + # so we should try to get the underlying error another way. + # DMLC formats errors "[timestamp] file:line: ErrorMessage" + # ErrorMessage is usually formatted "ErrorType: message" + # We can try to extract the error type using the final ":" + end_pos = line.rfind(":") + if end_pos == -1: + return None + start_pos = line.rfind(":", 0, end_pos) + if start_pos == -1: + return None + err_name = line[start_pos + 1 : end_pos].strip() + if _valid_error_name(err_name): + return err_name + return None + else: + end_pos = line.find(":") + if end_pos == -1: + return None + err_name = line[:end_pos] + if _valid_error_name(err_name): + return err_name return None - err_name = line[:end_pos] - if _valid_error_name(err_name): - return err_name - return None def c2pyerror(err_msg): -- 2.7.4