Как я могу использовать трассировку стека, чтобы сказать мне, какое исключение я должен использовать для попытки / кроме Python - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу написать блок Try / Except, который перехватывает специфическую ошибку, вызывающую эту трассировку стека:

  File "/home/me/anaconda2/envs/deepnn/lib/python2.7/site-packages/tensorflow/python/debug/wrappers/local_cli_wrapper.py", line 292, in _prep_cli_for_run_start
    self._run_cli = ui_factory.get_ui(self._ui_type)
  File "/home/me/anaconda2/envs/deepnn/lib/python2.7/site-packages/tensorflow/python/debug/cli/ui_factory.py", line 61, in get_ui
    return curses_ui.CursesUI(on_ui_exit=on_ui_exit, config=config)
  File "/home/me/anaconda2/envs/deepnn/lib/python2.7/site-packages/tensorflow/python/debug/cli/curses_ui.py", line 289, in __init__
    self._screen_init()
  File "/home/me/anaconda2/envs/deepnn/lib/python2.7/site-packages/tensorflow/python/debug/cli/curses_ui.py", line 404, in _screen_init
    self._screen_color_init()
  File "/home/me/anaconda2/envs/deepnn/lib/python2.7/site-packages/tensorflow/python/debug/cli/curses_ui.py", line 409, in _screen_color_init
    curses.use_default_colors()
_curses.error: use_default_colors() returned ERR

Но не могу понять, как определить, какое правильное исключениеis.

Я написал следующую попытку / кроме получения дополнительной информации:

        try:
             ... call to procedure that generates error ...
        except Exception,e:
            print("type is:", e.__class__.__name__)
            import sys
            print(sys.exc_info())

И результат, который я получил:

type is: error
(<class '_curses.error'>, error('use_default_colors() returned ERR',), <traceback object at 0x7fdec55abdd0>)
> /home/me/Projects/kerasECOC/net_manager.py(164)init_model_architecture()

Но, когда я пытаюсь

Except error,e:

я получаю следующее сообщение об ошибке:

  File "/home/me/Projects/kerasECOC/net_manager.py", line 157, in init_model_architecture
    except error,e:
NameError: global name 'error' is not defined

Итак, как я могу выяснить, какое конкретное исключение для флага?

1 Ответ

1 голос
/ 18 апреля 2019

Как показывает трассировка, вы должны использовать curses.error:

import curses

try:
    ...
except curses.error as err:
    print(err)

Вы можете проверить curses.error.mro() для базовых классов, которые вы могли бы, кроме как:

>>> curses.error.mro()
[<class '_curses.error'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>]

Однако оно не наследуется от одного из конкретных исключений .

...