Aaron Booher
Aaron Booher

Reputation: 51

What are exceptions in Python?

I've read three beginner-level Python books, however, I still don't understand exceptions.

Could someone give me a high level explanation?

I guess I understand that exceptions are errors in code or process that cause the code to stop working.

Upvotes: 3

Views: 324

Answers (5)

Manan Jain
Manan Jain

Reputation: 37

Exceptions are unexpected events that occur during the execution of a program. An exception might result from a logical error or an unanticipated situation.

In Python, exceptions (also known as errors) are objects that are raised (or thrown) by code that encounters an unexpected circumstance.

The Python interpreter can also raise an exception should it encounter an unexpected condition, like running out of memory. A raised error may be caught by a surrounding context that “handles” the exception in an appropriate fashion.

If uncaught, an exception causes the interpreter to stop executing the program and to report an appropriate message to the console.

def sqrt(x):

   if not isinstance(x, (int, float)):
       raise TypeError( x must be numeric )
   elif x < 0:
       raise ValueError( x cannot be negative )

Upvotes: 0

David Legg
David Legg

Reputation: 281

Exceptions are not necessarily errors. They are things that get raised when the code encounters something it doesn't (immediately) know how to deal with. This may be entirely acceptable, depending on how you make your code. For instance, let's say you ask a user to put in a number. You then try to take that text (string) and convert it to a number (int). If the user put in, let's say, "cat", however, this will raise an exception. You could have your code handle that exception, however, and rather than break, just give the user a small message asking him to try again, and please use a number. Look at this link to see what I'm talking about: http://www.tutorialspoint.com/python/python_exceptions.htm Also, you usually handle exceptions with a try, except (or catch) block. Example:

try:
    integer = int(raw_input("Please enter an integer: "))
except Exception, exc:
    print "An error has occured."
    print str(exc)

Hope it helps!

Upvotes: -1

bentrevor
bentrevor

Reputation: 268

Python's documentation: http://docs.python.org/2/tutorial/errors.html

For a high-level explanation, say we want to divide varA / varB. We know that varB can't equal 0, but we might not want to perform the check every time we do the division:

if varB != 0:
  varA / varB

We can use exceptions to try the block without performing the conditional first, and then handle the behavior of the program based on whether or not something went wrong in the try block. In the following code, if varB == 0, then 'oops' is printed to the console:

try:
  varA / varB
except ZeroDivisionError:
  print 'oops'

Here is a list of exceptions that can be used: http://docs.python.org/2/library/exceptions.html#exceptions.BaseException

However, if you know how it may fail, you can just open a python console and see what exception is raised:

>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

Upvotes: 1

abarnert
abarnert

Reputation: 365667

In the old days, when people wrote in assembly language or C, every time you called a function that might fail, you had to check whether it succeeded. So you'd have code like this:

def countlines(path):
    f = open(path, 'r')
    if not f:
        print("Couldn't open", path)
        return None
    total = 0
    for line in f:
        value, success = int(line)
        if not success:
            print(line, "is not an integer")
            f.close()
            return None
        total += value
    f.close()
    return total

The idea behind exceptions is that you don't worry about those exceptional cases, you just write this:

def countlines(path):
    total = 0
    with open(path, 'r') as f:
        for line in f:
            total += int(line)
    return total

If Python can't open the file, or turn the line into an integer, it will raise an exception, which will automatically close the file, exit your function, and quit your whole program, printing out useful debugging information.

In some cases, you want to handle an exception instead of letting it quit your program. For example, maybe you want to print the error message and then ask the user for a different filename:

while True:
    path = input("Give me a path")
    try:
        print(countlines(path))
        break
    except Exception as e:
        print("That one didn't work:", e)

Once you know the basic idea that exceptions are trying to accomplish, the tutorial has a lot of useful information.

If you want more background, Wikipedia can help (although the article isn't very useful until you understand the basic idea).

If you still don't understand, ask a more specific question.

Upvotes: 3

Jeff Ferland
Jeff Ferland

Reputation: 18282

The best place to start with that is Python's list of built-in exceptions, since most you'll see derive from that.

Keep in mind that anybody can throw any error they want over anything, and then catch it and dismiss it as well. Here's one quick snippet that uses exceptions for handling instead of if/else where __get_site_file() throws an exception if the file isn't found in any of a list of paths. Despite that particular exception, the code will still work. However, the code would throw an uncaught error that stops execution if the file exists but the permissions don't allow reading.

def __setup_site_conf(self):                                                
    # Look for a site.conf in the site folder                              
    try:                                                                    
        path = self.__get_site_file('site.conf')                            
        self.__site_conf = open(path).read()                                
    except EnvironmentError:                                                
        self.__site_conf = self.__get_site_conf_from_template()             

Upvotes: 1

Related Questions