Python: в чем разница между явным выходом и просто разрешением выполнения до конца файла?

Для простого скрипта python, который не запускает ни потоков, ни fork каких-либо процессов, в чем разница между простотой выполнения выполнения до конца скрипта и явным вызовом quit (), exit () или sys.exit ()?

т.е. какая разница между

def main(): # do some stuff print("Done doing stuff") if __name__ == '__main__': main() 

а также

 import sys def main(): # do some stuff print("Done doing stuff") # explicit exit sys.exit() if __name__ == '__main__': main() 

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

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

Банальный пример:

 try: ... except KeyboardInterrupt: x = input('Sure you want to exit? y/n') if x == 'y': quit() else: pass