Я хотел бы знать, как выйти из Python, не имея дамп трассировки на выходе.
Я все еще хочу иметь возможность вернуть код ошибки, но я не хочу отображать журнал трассировки.
Я хочу быть в состоянии выйти из использования exit(number)
без трассировки, но в случае исключения (не выхода) я хочу трассировки.
Ответы:
Вероятно, вы столкнулись с исключением, и программа завершает работу из-за этого (с отслеживанием). Поэтому первое, что нужно сделать, - это перехватить это исключение перед чистым выходом (возможно, с сообщением, приведенным примером).
Попробуйте что-то вроде этого в вашей
main
повседневной жизни:источник
except Exception:
вsys.exit(0)
, включительно. Это уже поведение по умолчанию - выводить трассировку для всех необработанных исключений и выходить после завершения кода, так зачем же делать это вручную?sys.exit()
следует использовать для программ.exit()
предназначен для интерактивных оболочек. Смотрите разницу между exit () и sys.exit () в Python? ,Возможно, вы пытаетесь поймать все исключения, а это ловит
SystemExit
исключение, вызванноеsys.exit()
?В общем, использование
except:
без именования исключение является плохой идеей. Вы будете ловить все виды вещей, которые вы не хотите поймать - например,SystemExit
- и это также может маскировать ваши собственные ошибки программирования. Мой пример выше глуп, если вы не делаете что-то с точки зрения очистки. Вы можете заменить его на:Если вам нужно выйти без поднятия
SystemExit
:Я делаю это в коде, который работает под unittest и вызывает
fork()
. Unittest получает, когда разветвленный процесс повышаетсяSystemExit
. Это определенно угловой случай!источник
SystemExit
чтобы просто позвонитьsys.exit(e)
? Удаление обеих строк имеет одинаковый эффект. Кроме того, очистка принадлежитfinally:
, а неexcept Exception: ... raise
.источник
что-то вроде
import sys; sys.exit(0)
?источник
Следующий код не вызовет исключение и завершится без трассировки:
Смотрите этот вопрос и связанные с ним ответы для более подробной информации. Удивлен, почему все остальные ответы слишком сложны.
источник
Намного лучше избегать использования sys.exit () и вместо этого вызывать / обрабатывать исключения, чтобы позволить программе завершить работу без ошибок. Если вы хотите отключить трассировку, просто используйте:
Вы можете установить это в верхней части вашего скрипта, чтобы подавить весь вывод трассировки, но я предпочитаю использовать его более экономно, например, «известные ошибки», где я хочу, чтобы вывод был чистым, например, в файле foo.py:
Если CalledProcessError пойман, вывод будет выглядеть так:
Если возникает какая-либо другая ошибка, мы все равно получаем полный вывод трассировки.
источник
sys.trackbacklimit
в Python 3, смотрите этот ответ .Используйте встроенную функцию python quit () и все. Нет необходимости импортировать любую библиотеку. Я использую Python 3.4
источник
Я бы сделал это так:
источник
Что о
Нет трассировки и как-то более явно.
источник
источник