Как выйти из Python без traceback?

Когда у Вас есть важный класс, но система не может создать экземпляр fo этот класс, потому что

  • этот класс является родителем большого количества классов системы;
  • это несет большую ответственность (методы, используемые большим количеством класса) для домена, требует;
  • этот класс не представляет конкретный объект;
270
задан the Tin Man 26 January 2015 в 10:25
поделиться

4 ответа

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

Попробуйте что-нибудь подобное в своей подпрограмме main :

import sys, traceback

def main():
    try:
        do main program stuff here
        ....
    except KeyboardInterrupt:
        print "Shutdown requested...exiting"
    except Exception:
        traceback.print_exc(file=sys.stdout)
    sys.exit(0)

if __name__ == "__main__":
    main()
288
ответ дан 23 November 2019 в 02:18
поделиться

Возможно, вы пытаетесь перехватить все исключения, а это перехват исключения SystemExit , вызванного sys.exit () ?

import sys

try:
    sys.exit(1) # Or something that calls sys.exit()
except SystemExit as e:
    sys.exit(e)
except:
    # Cleanup and reraise. This will print a backtrace.
    # (Insert your cleanup code here.)
    raise

В общем, использование за исключением: без имени исключения - плохая идея. Вы поймаете все виды вещей, которые не хотите ловить - например, SystemExit - и он также может замаскировать ваши собственные ошибки программирования. Мой пример выше глуп, если вы не делаете что-то с точки зрения очистки. Вы можете заменить его на:

import sys
sys.exit(1) # Or something that calls sys.exit().

Если вам нужно выйти, не вызывая SystemExit :

import os
os._exit(1)

Я делаю это в коде, который выполняется в режиме unittest и вызывает fork () . Unittest получает, когда разветвленный процесс вызывает SystemExit . Это определенно угловой случай!

80
ответ дан 23 November 2019 в 02:18
поделиться
import sys
sys.exit(1)
44
ответ дан 23 November 2019 в 02:18
поделиться

something like import sys; sys.exit(0) ?

9
ответ дан 23 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

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