Сегодня я столкнулся с тем фактом, что sys.exit()
, вызванный из дочернего потока, не уничтожает основной процесс. Я не знал этого раньше, и это нормально, но мне нужно было много времени, чтобы понять это. Это сэкономило бы много времени , если бы sys.exit(msg)
напечатало бы msg
до stderr
. Но это не так.
Оказалось, что это не было настоящей ошибкой в моем приложении; он вызвал sys.exit(msg)
со значительной ошибкой, но я просто не мог этого увидеть.
В документах для sys.exit()
указано :
"[...] любой другой объект печатается на sys.stderr
и приводит к коду выхода 1"
Это не соответствует действительности для вызова из дочернего потока, где sys.exit()
явно ведет себя как thread.exit()
:
"Вызовите исключение SystemExit. Если оно не перехвачено, это приведет к завершению потока без вывода сообщений "
Я думаю, что когда программист хочет, чтобы sys.exit(msg)
напечатал сообщение об ошибке, тогда это должно быть напечатано, независимо от места, откуда оно вызывается. Почему бы и нет? Я в настоящее время не вижу никакой причины. По крайней мере, в документах sys.exit()
должен быть указатель на то, что сообщение не распечатывается из потоков.
Что ты думаешь? Почему сообщения об ошибках скрыты от потоков? Имеет ли это смысл?
С уважением,
Ян-Филипп Герке