Я пытаюсь найти хороший способ обработки ошибок в __init__()
, не обнаруживая конфиденциальных данных в трассировке.Python (2.7): Обработка ошибок в __init__ с чувствительной информацией
У меня есть класс на основе pxssh, и я выполняю мое соединение в __init__()
. Целью является инициализация объекта для отправки команд CLI дочернему устройству.
class MyClass(pxssh.pxssh):
def __init__(self, credentials):
.
.
.
try:
self.connect(credentials)
except Exception as e:
stderr.write('Error: %s\n' % str(e)
exit(1)
Это был хорош для тестирования, но этот класс предназначен для использования другого кода, и я не хочу идти убивать вызывающий с exit(1)
.
Я бы использовал raise
вместо exit(1)
, но проблема в том, что credentials
- это словарь, содержащий пароль и другую конфиденциальную информацию о соединении. Я не хочу, чтобы он сбрасывался в трассировку, если вызывающий абонент просто поднимает все исключения, которые я бросаю.
Какой был бы лучший способ справиться с этой ситуацией?
Спасибо!
Если вы беспокоитесь о трассировке, почему бы не «поднять» новую ошибку, которая не содержит ничего из «учетных данных»? – jonrsharpe
@jonrsharpe, вероятно, потому, что они хотят «поднять» из '__init__', и независимо от того, какая ошибка возникла, созданная таким образом трассировка будет включать ссылку на фрейм, в котором запущен' __init__' (включая словарь 'credentials') –
@ Да, я вижу. Хорошо, если OP обеспокоен атаками в процессе, как вы прокомментируете ниже, сделать нечего! – jonrsharpe