Понимание `traceback.format_exception_only ()` - PullRequest
0 голосов
/ 21 сентября 2018

Я хотел просто напечатать тип исключения и сообщение.

Сначала я попытался:

try:
    raise Exception("duh!!!")
except Exception as err:
    print(err)

Но это только печатное сообщение об исключении.

 duh!!!

Тогда япрошел весь traceback документ , и я почувствовал, что traceback.format_exception_only() - это то, что я ищу.

Итак, я попробовал это следующим образом:

try:
    raise Exception("duh!!!")
except:
    etype, evalue, tb = sys.exc_info()
    print(traceback.format_exception_only(etype, evalue)))

и напечатано следующее:

['Exception: duh!!!\n']

, что выглядело немного неожиданным для меня.Поэтому я перечитал документацию по этому методу.В нем говорится следующее:

Отформатируйте исключительную часть трассировки.Аргументы - это тип и значение исключения, такие как sys.last_type и sys.last_value.Возвращаемое значение представляет собой список строк, каждая из которых заканчивается новой строкой.Обычно список содержит одну строку;однако для исключений SyntaxError он содержит несколько строк, которые (при печати) отображают подробную информацию о том, где произошла синтаксическая ошибка.Сообщение, указывающее, какое исключение произошло, всегда является последней строкой в ​​списке.

Итак, я понял, что документ говорит, что это список, поэтому в выводе [...] есть список.Также в документе говорится, что каждая строка заканчивается новой строкой, поэтому в выводе есть \n.Но я не понимаю, когда будет несколько строк в случае SyntaxError?Я не могу произвести SyntaxError, что приведет к нескольким строкам в возвращаемом значении format_exception_only().

Также мне вдруг показалось, что я могу просто сделать

try:
    raise Exception("duh!!!")
except:
    etype, evalue, tb = sys.exc_info()
    print('{}: {}'.format(etype.__name__, evalue))

, чтобы получить

Exception: duh!!!

Но тогда как format_exception_only() добавляет к этому больше значения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...