Python Raise Error String
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow the company python error types Business Learn more about hiring developers or posting ads with us Stack Overflow Questions Jobs
Python Raise Custom Exception
Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 6.2 million programmers, just python raise valueerror like you, helping each other. Join them; it only takes a minute: Sign up Manually raising (throwing) an exception in Python up vote 800 down vote favorite 189 How can I raise an exception in Python so syntax for generic except clause in python that it can later be caught via an except block? python exception exception-handling share|improve this question edited Feb 3 '15 at 14:37 DavidRR 5,20472747 asked Jan 12 '10 at 21:07 TIMEX 41.2k201525826 add a comment| 3 Answers 3 active oldest votes up vote 787 down vote accepted How do I manually throw/raise an exception in Python? Use the most specific Exception constructor that semantically fits your issue. Be specific in your message, e.g.: raise
Python Exception Message
ValueError('A very specific bad thing happened') Don't do this: Avoid raising a generic Exception, to catch it, you'll have to catch all other more specific exceptions that subclass it. Hiding bugs raise Exception('I know Python!') # don't, if you catch, likely to hide bugs. For example: def demo_bad_catch(): try: raise ValueError('represents a hidden bug, do not catch this') raise Exception('This is the exception you expect to handle') except Exception as error: print('caught this error: ' + repr(error)) >>> demo_bad_catch() caught this error: ValueError('represents a hidden bug, do not catch this',) Won't catch and more specific catches won't catch the general exception: def demo_no_catch(): try: raise Exception('general exceptions not caught by specific handling') except ValueError as e: print('we will not catch e') >>> demo_no_catch() Traceback (most recent call last): File "
Pages Local Site Map ------------------------ Rename Page Delete Page ------------------------ ------------------------ Remove Spam Revert to this revision ------------------------ SlideShow User Login Handling Exceptions The simplest way to handle exceptions is with a "try-except" block: 1 (x,y) = (5,0) 2 try: 3 z = x/y 4 except ZeroDivisionError: 5 syntax for raise clause in python print "divide by zero" If you wanted to examine the exception from code, is nested try block possible in python you could have: 1 (x,y) = (5,0) 2 try: 3 z = x/y 4 except ZeroDivisionError as e: 5 z
Python Exception Stack Trace
= e # representation: " Error: %s
program can't really proceed normally. For an overview, see Section 25, “Exceptions: Error signaling https://infohost.nmt.edu/tcc/help/pubs/python/web/raise-statement.html and handling”. There are three forms of the raise statement: http://www.ianbicking.org/blog/2007/09/re-raising-exceptions.html raise raise E1 raise E1, E2 The first form is equivalent to “raise None,None” and the second form is equivalent to “raise E1
, None”. Each form raises an exception of a given type and with a python raise given value. The type and value depend on how many expressions you provide: E1
E2
Exception typeException valueNoneNone Re-raise the current exception, if any. This might be done, for example, inside an except, else, or finally block; see Section 23.8, “The try statement: Anticipate exceptions”. classNone E1
E1()
class instance of E1
E1
E2
classtupleE1
E1
(*E2) classnone of the aboveE1
E1
(E2) instanceNone type(E1
) E1
The current recommended practice is to use a raise statement of this form: raise E(...) where E
is some class derived from the built-in Exception class: you can use one of the built-in exceptions, or you can create your own exception classes. For classes derived from Exception, the constructor takes one argument, an error message—that is, a string explaining why the exception was raised. The resulting instance makes that message available as an attribute named .message. Example: >>> try: ... raise ValueError('The day is too frabjous.') ... except ValueError as x: ... pass ... >>> type(x)
a little mini-tutorial for Python programmers, aboutexceptions… First, this isbad: try: some_code() except: revert_stuff() raise Exception("some_code failed!") It is bad because all the information about how some_code() failed is lost. The traceback, the error message itself. Maybe it was an expected error, maybe itwasn't. Here's a modest improvement (but still not verygood): try: some_code() except: import traceback traceback.print_exc() revert_stuff() raise Exception("some_code failed!") traceback.print_exc() prints the original traceback to stderr. Sometimes that's the best you can do, because you really want to recover from an unexpected error. But if you aren't recovering, this is what you shoulddo: try: some_code() except: revert_stuff() raise Using raise with no arguments re-raises the last exception. Sometimes people give a blank never use "except:" statement, but this particular form (except: + raise) isokay. There's another form of raise that not many people know about, but can also be handy. Like raise with no arguments, it can be used to keep thetraceback: try: some_code() except: import sys exc_info = sys.exc_info() maybe_raise(exc_info) def maybe_raise(exc_info): if for some reason this seems like it should be raised: raise exc_info[0], exc_info[1], exc_info[2] This can be handy if you need to handle the exception in some different part of the code from where the exception happened. But usually it's not that handy; it's an obscure feature for areason. Another case when people often clobber the traceback is when they want to add information to it,e.g.: for lineno, line in enumerate(file): try: process_line(line) except Exception, exc: raise Exception("Error in line %s: %s" % (lineno, exc)) You keep the error message here, but lose the traceback. There's a couple ways to keep that traceback. One I sometimes use is to retain the exception, but change themessage: except Exception, exc: args = exc.args if not args: arg0 = '' else: arg0 = args[0] arg0 += ' at line %s' % lineno exc.args = arg0 + args[1:] raise It's a little awkward. Technically (t