[Tutor] exception question
Dave S
pythontut at pusspaws.net
Thu Apr 29 17:06:28 EDT 2004
Michael Janssen wrote:
>On Wed, 28 Apr 2004, Danny Yoo wrote:
>
>
>
>>[Dave]
>>
>>
>>>My problem is I do not know what the exception error will be. I have a
>>>script that will run 247, If an error occurs I want it to e-mail me with
>>>the exception error that caused the crash.
>>>
>>>
>
>
>
>>We can get a better stack trace out of the error by using the 'traceback'
>>module:
>>
>> http://www.python.org/doc/lib/module-traceback.html
>>
>>So we can probably just trap all "Exception" things, and then use
>>traceback to extract more specific information out of the exception.
>>
>>
>
>The traceback-module is the way to do it. Otherwise one will lose all this
>"line XX, in foo" information. Since traceback is somewhat complicated
>(too much slightly different functions to choose from) I feel like it's
>okey, when I post a more or less complete solution.
>
>Assuming you have done your best catching possible errors but you can't be
>shure which errors else might show up. The programm is running
>automatically or via web, so the printed traceback isn't of that much
>help.
>
>Then you put your "main" function (i.e. the function that contains all of
>your programm - it's allways good to organize your scripts that way)
>within a catchall try-except clause:
>
>
>if __name__ == "__main__":
> try: main()
> except:
> import traceback, sys
> tb_list = traceback.format_exception(*sys.exc_info())
> body = "Script: %s\n" % sys.argv[0]
> body += ''.join(tb_list)
> mail(body, subject="Script Error", addr="Your address")
> # give it back to console in case somebody is watching
> raise
>
>
>Explanations:
>
>'if __name__ == "__main__"' is just a ward against running the code when
>*importing* the file as a module. It's nice to have when you ever want to
>import the script (to reuse its tricky functions). Has nothing to do with
>our topic ;-)
>
>"sys.exc_info()": this is where the traceback-object comes from. There is
>a warning on http://www.python.org/doc/lib/module-sys.html about problems
>with garbage collection. Nevertheless above code should be save (at least
>because the programm will terminate soon ;-).
>
>"*sys.exc_info()": sys.exc_info returns a tuple. "*" unfolds the tuple as
>arguments to format_exception. This special syntax is described in:
>http://docs.python.org/tut/ Section 4.7.4
>
>traceback.format_exception: from all those functions from the
>traceback-module this seems proper to me.
>
>"mail": I hope you got your own mail-function? Use smtplib.
>
>
>The result looks very much like a traceback as written to console. Adding
>the hostname into the mail might be a good idea (with socket.gethostname).
>
>
>Michael
>
>_______________________________________________
>Tutor maillist - Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor
>
>
>
>
This is invaluable stuff. Thank you so much for taking the time to explain.
You have given me some new ideas - and explained the
__name__ == "__main__"
thing !
Cheers again
Dave
:-) :-) :-) :-)
More information about the Tutor
mailing list