Another advantage is that you can catch all the unhandled exceptions of the entire program (it they occurs) by doing something like this:
def another_call(): raise SomeUnexpectedException # it will be catched in '__main__' def call(): another_call() def run(): call() in __name__ == '__main__': try: run() except: # do cleanup # log exit message # exit -- http://mail.python.org/mailman/listinfo/python-list