Как реализовать высокоуровневую обработку исключений?

example, распаковывает значение из значения RHS (в данном случае набор данных с одним элементом) в кортеж LHS. Распаковка набора данных эквивалентна итерации по нему: каждое итерированное значение становится элементом результирующего кортежа. В этом случае это работает, потому что набор данных имеет только один элемент (dataset.take(1)). Если ваш набор данных содержит три элемента, кортежу LHS потребуется три элемента, например:

dataset = tf.data.Dataset.range(3)  # {0, 1, 2}
a, b, c = dataset

# a: tf.Tensor: 0
# b: tf.Tensor: 1
# c: tf.Tensor: 2
9
задан LeopardSkinPillBoxHat 5 March 2009 в 22:56
поделиться

4 ответа

Отложите его.

Исключение должно быть только релевантным при тестировании. Иначе это не имеет смысл вытолкать его пользователю.

Вход прекрасен.

Можно дополнительно использовать Отладочный символ, определенный Visual Studio для сборок отладки как флаг.

    ...
    } catch( Exception e ) { 
#if DEBUG
          throw;
#else
          log as usual 
#endif
    }

В таким образом, следующий раз, когда модификация необходима, флаг отладки должен иметь значение true, и исключение откроется.

12
ответ дан 4 December 2019 в 10:05
поделиться

В любом JAVA-приложении Вы примерно всегда хотите определить обработчик исключений для неперехваченных исключений с чем-то вроде этого:

Thread.setDefaultUncaughtExceptionHandler( ... );

где объект, который поймает эти неперехваченные исключения, по крайней мере, зарегистрирует отказ, таким образом, у Вас будет шанс знать об этом. Иначе нет никакой гарантии, что Вы будете даже уведомлены, что Поток взял Исключение - не, если это не Ваш основной Поток.

В дополнение к выполнению этого большинство моих потоков имеет попытку/выгоду, где я поймаю RunnableException (но нет Error) и зарегистрируйте его... некоторые Потоки умрут, когда это произойдет, другие зарегистрируют и проигнорируют, другие отобразят жалобу пользователю и позволят пользователю решить, в зависимости от потребностей Приложения. Эта попытка/выгода в самом корне Потока, в Runnable.run() метод или эквивалент. Так как попытка/выгода в корне Потока, нет никакой потребности иногда отключить эту выгоду.

Когда я пишу в C#, я кодирую так же. Но это все зависит от потребности приложения. Тот Исключения, который повредит данные? Хорошо затем не ловите и игнорируйте его. ВСЕГДА регистрируйте его, но затем Позволяйте приложению умереть. Большинство Исключений не имеет этого вида, как бы то ни было.

4
ответ дан 4 December 2019 в 10:05
поделиться

Желание поймать все исключения и сделать программу 'стабильной' очень сильно, и идея кажется очень соблазнительной действительно всем. Проблема, как Вы указываете, состоит в том, что это - просто уловка, и программа может быть багги и хуже, w/o признаки отказов. Никто регулярно не контролирует журналы.
Мой совет состоял бы в том, чтобы попытаться убедить другого разработчика делать обширное тестирование и затем развертывать его в производстве w/o внешняя выгода.

2
ответ дан 4 December 2019 в 10:05
поделиться

Идеально Вы хотите обработать исключение максимально близко к тому, где оно произошло, но это не означает, что глобальный обработчик исключений является плохой идеей. Специально для сервиса, который должен остаться работать любой ценой. Я продолжил бы то, что Вы делали. Отключите его при отладке, но оставьте его на месте для производства.

Следует иметь в виду, что это должно использоваться в качестве системы поддержки. Все еще попытайтесь поймать все исключения, прежде чем они поднимут это далеко.

2
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: