Try and Except in Python (2023)

The try except statement can handle exceptions. Exceptions may happen when you run a program.

Exceptions are errors that happen during execution of the program. Python won’t tell you about errors like syntax errors (grammar faults), instead it will abruptly stop.

An abrupt exit is bad for both the end user and developer.

Instead of an emergency halt, you can use a try except statement to properly deal with the problem. An emergency halt will happen if you do not properly handle exceptions.

Related course: Complete Python Programming Course & Exercises

What are exceptions in Python?

Python has built-in exceptions which can output an error. If an error occurs while running the program, it’s called an exception.

If an exception occurs, the type of exception is shown. Exceptions needs to be dealt with or the program will crash. To handle exceptions, the try-catch block is used.

Some exceptions you may have seen before are FileNotFoundError, ZeroDivisionError or ImportError but there are many more.

All exceptions in Python inherit from the class BaseException. If you open the Python interactive shell and type the following statement it will list all built-in exceptions:

 >>> dir(builtins)

The idea of the try-except clause is to handle exceptions (errors at runtime). The syntax of the try-except block is:

1
2
3
4
try:
<do something>
except Exception:
<handle the error>

The idea of the try-except block is this:

(Video) Python Tutorial: Using Try/Except Blocks for Error Handling

  • try: the code with the exception(s) to catch. If an exception is raised, it jumps straight into the except block.

  • except: this code is only executed if an exception occured in the try block. The except block is required with a try block, even if it contains only the pass statement.

It may be combined with the else and finally keywords.

  • else: Code in the else block is only executed if no exceptions were raised in the try block.

  • finally: The code in the finally block is always executed, regardless of if a an exception was raised or not.

Catching Exceptions in Python

The try-except block can handle exceptions. This prevents abrupt exits of the program on error. In the example below we purposely raise an exception.

1
2
3
4
5
6
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')

After the except block, the program continues. Without a try-except block, the last line wouldn’t be reached as the program would crash.

 $ python3 example.py

Divided by zero
Should reach here

In the above example we catch the specific exception ZeroDivisionError. You can handle any exception like this:

1
2
3
4
5
6
try: 
open("fantasy.txt")
except:
print('Something went wrong')

print('Should reach here')

You can write different logic for each type of exception that happens:

(Video) Try / Except | Python | Tutorial 27

1
2
3
4
5
6
7
8
9
10
try: 
# your code here
except FileNotFoundError:
# handle exception
except IsADirectoryError:
# handle exception
except:
# all other types of exceptions

print('Should reach here')

Related course: Complete Python Programming Course & Exercises

try-except

Lets take do a real world example of the try-except block.

The program asks for numeric user input. Instead the user types characters in the input box. The program normally would crash. But with a try-except block it can be handled properly.

The try except statement prevents the program from crashing and properly deals with it.

1
2
3
4
5
6
try:
x = input("Enter number: ")
x = x + 1
print(x)
except:
print("Invalid input")

Entering invalid input, makes the program continue normally:

Try and Except in Python (1)

The try except statement can be extended with the finally keyword, this will be executed if no exception is thrown:

1
2
finally:
print("Valid input.")

The program continues execution if no exception has been thrown.

There are different kinds of exceptions: ZeroDivisionError, NameError, TypeError and so on. Sometimes modules define their own exceptions.

The try-except block works for function calls too:

1
2
3
4
5
6
7
8
9
def fail():
1 / 0

try:
fail()
except:
print('Exception occured')

print('Program continues')

This outputs:

(Video) Python Programming Tutorial #18 - Try and Except (Python Error Handling)

 $ python3 example.py

Exception occured
Program continues

If you are a beginner, then I highly recommend this book.

try finally

A try-except block can have the finally clause (optionally). The finally clause is always executed.
So the general idea is:

1
2
3
4
5
6
try:
<do something>
except Exception:
<handle the error>
finally:
<cleanup>

For instance: if you open a file you’ll want to close it, you can do so in the finally clause.

1
2
3
4
5
6
7
8
try: 
f = open("test.txt")
except:
print('Could not open file')
finally:
f.close()

print('Program continue')

try else

The else clause is executed if and only if no exception is raised. This is different from the finally clause that’s always executed.

1
2
3
4
5
6
7
8
try:
x = 1
except:
print('Failed to set x')
else:
print('No exception occured')
finally:
print('We always do this')

Output:

 No exception occured
We always do this

You can catch many types of exceptions this way, where the else clause is executed only if no exception happens.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try:
lunch()
except SyntaxError:
print('Fix your syntax')
except TypeError:
print('Oh no! A TypeError has occured')
except ValueError:
print('A ValueError occured!')
except ZeroDivisionError:
print('Did by zero?')
else:
print('No exception')
finally:
print('Ok then')

Raise Exception

Exceptions are raised when an error occurs. But in Python you can also force an exception to occur with the keyword raise.

Any type of exception can be raised:

(Video) Exceptions in Python || Python Tutorial || Learn Python Programming

1
2
3
4
>>> raise MemoryError("Out of memory")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError: Out of memory
1
2
3
4
5
>>> raise ValueError("Wrong value")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Wrong value
>>>

Related course: Complete Python Programming Course & Exercises

Built-in exceptions

A list of Python's Built-in Exceptions is shown below. This list shows the Exception and why it is thrown (raised).
ExceptionCause of Error
AssertionError if assert statement fails.
AttributeError if attribute assignment or reference fails.
EOFError if the input() functions hits end-of-file condition.
FloatingPointError if a floating point operation fails.
GeneratorExitRaise if a generator's close() method is called.
ImportErrorif the imported module is not found.
IndexErrorif index of a sequence is out of range.
KeyErrorif a key is not found in a dictionary.
KeyboardInterruptif the user hits interrupt key (Ctrl+c or delete).
MemoryErrorif an operation runs out of memory.
NameErrorif a variable is not found in local or global scope.
NotImplementedError by abstract methods.
OSErrorif system operation causes system related error.
OverflowErrorif result of an arithmetic operation is too large to be represented.
ReferenceErrorif a weak reference proxy is used to access a garbage collected referent.
RuntimeErrorif an error does not fall under any other category.
StopIteration by next() function to indicate that there is no further item to be returned by iterator.
SyntaxError by parser if syntax error is encountered.
IndentationErrorif there is incorrect indentation.
TabErrorif indentation consists of inconsistent tabs and spaces.
SystemErrorif interpreter detects internal error.
SystemExit by sys.exit() function.
TypeErrorif a function or operation is applied to an object of incorrect type.
UnboundLocalErrorif a reference is made to a local variable in a function or method, but no value has been bound to that variable.
UnicodeErrorif a Unicode-related encoding or decoding error occurs.
UnicodeEncodeErrorif a Unicode-related error occurs during encoding.
UnicodeDecodeErrorif a Unicode-related error occurs during decoding.
UnicodeTranslateErrorif a Unicode-related error occurs during translating.
ValueErrorif a function gets argument of correct type but improper value.
ZeroDivisionErrorif second operand of division or modulo operation is zero.

Python has many standard types of exceptions, but they may not always serve your purpose.
Your program can have your own type of exceptions.

To create a user-defined exception, you have to create a class that inherits from Exception.

1
2
3
4
class LunchError(Exception):
pass

raise LunchError("Programmer went to lunch")

You made a user-defined exception named LunchError in the above code. You can raise this new exception if an error occurs.

Outputs your custom error:

 $ python3 example.py
Traceback (most recent call last):
File “example.py”, line 5, in
raise LunchError(“Programmer went to lunch”)
main.LunchError: Programmer went to lunch

Your program can have many user-defined exceptions. The program below throws exceptions based on a new projects money:

1
2
3
4
5
6
7
8
9
10
11
class NoMoneyException(Exception):
pass

class OutOfBudget(Exception):
pass

balance = int(input("Enter a balance: "))
if balance < 1000:
raise NoMoneyException
elif balance > 10000:
raise OutOfBudget

Here are some sample runs:

 $ python3 example.py
Enter a balance: 500
Traceback (most recent call last):
File “example.py”, line 10, in
raise NoMoneyException
main.NoMoneyException
 $ python3 example.py
$ python3 example.py
Enter a balance: 100000
Traceback (most recent call last):
File “example.py”, line 12, in
raise OutOfBudget
main.OutOfBudget

It is a good practice to put all user-defined exceptions in a separate file (exceptions.py or errors.py). This is common practice in standard modules too.

(Video) Python Programming Tutorial: Try Except Else

If you are a beginner, then I highly recommend this book.

Exercises

  1. Can try-except be used to catch invalid keyboard input?
  2. Can try-except catch the error if a file can’t be opened?
  3. When would you not use try-except?

Download examples

FAQs

Is it bad to use try and except in Python? ›

👩‍💻 When to use try/except. The reason to use try/except is when you have a code block to execute that will sometimes run correctly and sometimes not, depending on conditions you can't foresee at the time you're writing the code.

How many try-except works in Python? ›

By handling multiple exceptions, a program can respond to different exceptions without terminating it. In Python, try-except blocks can be used to catch and respond to one or multiple exceptions. In cases where a process raises more than one possible exception, they can all be handled using a single except clause.

What can I use instead of try and except in Python? ›

If the situation satisfies the above conditions, you don't have to use try ... except ... to handle the exceptions. Instead, the Python built-in library contextlib provides a function called suppress to handle this more elegantly.

Is try-except faster than if Python? ›

It will be faster if exceptions really are exceptional. If result is None more than 50 % of the time, then using if is probably better. So, whereas an if statement always costs you, it's nearly free to set up a try/except block.

Is try and except good practice? ›

Using try-except is the most common and natural way of handling unexpected errors along with many more exception handling constructs. In this tutorial, you'll get to explore some of the best techniques to use try-except in Python. Error Handling or Exception Handling in Python can be enforced by setting up exceptions.

Can you have 2 try-except Python? ›

You cannot have that. A try block is not there to suppress exceptions across all code executed. It'll let you catch the exception when it happens, but the rest of the block is never executed.

Is try except better than if else? ›

If you expect your code to encounter the error condition less often the non-error condition, then try... except is better. If you expect your code to encounter the error condition more often than the non-error condition, then if...else is better.

How many except statements can a try? ›

1. How many except statements can a try-except block have? Answer: d Explanation: There has to be at least one except statement. 2.

How do I stop multiple try except? ›

To avoid writing multiple try catch async await in a function, a better option is to create a function to wrap each try catch. The first result of the promise returns an array where the first element is the data and the second element is an error. And if there's an error, then the data is null and the error is defined.

How efficient is try except? ›

A try/except block is extremely efficient if no exceptions are raised. Actually catching an exception is expensive.

How do you bypass Python errors? ›

Errors should never pass silently.
...
The correct thought flow is:
  1. Write assert False.
  2. Notice that it might raise an AssertionError.
  3. Put assert False in a try... except... block.
  4. Write print 'Hello'
  5. Notice that this line will not cause any errors (famous last words, by the way)
  6. Profit.
5 Apr 2014

Is try catch faster than if? ›

If you've one if/else block instead of one try/catch block, and if an exceptions throws in the try/catch block, then the if/else block is faster (if/else block: around 0.0012 milliseconds, try/catch block: around 0.6664 milliseconds). If no exception is thrown with a try/catch block, then a try/catch block is faster.

Should every function have try except? ›

When you know what the error will be, use try/except for debugging purpose. Otherwise, you don't have to use try/except for every function.

Does try except stop execution? ›

The try… except block is completed and the program will proceed. However, if an exception is raised in the try clause, Python will stop executing any more code in that clause, and pass the exception to the except clause to see if this particular error is handled there.

Does try always need catch? ›

Yes, It is possible to have a try block without a catch block by using a final block. As we know, a final block will always execute even there is an exception occurred in a try block, except System.

Why we use try and except? ›

The try block lets you test a block of code for errors. The except block lets you handle the error. The else block lets you execute code when there is no error. The finally block lets you execute code, regardless of the result of the try- and except blocks.

What is the purpose of a try except statement? ›

The try-except statement is a Microsoft extension to the C language that enables applications to gain control of a program when events that normally terminate execution occur. Such events are called exceptions, and the mechanism that deals with exceptions is called structured exception handling.

Why would using except exception be unhelpful? ›

Another disadvantage of passing and catching Exception (or bare except ) is that we will never know the second error when there are two errors in the code. The first error will always be caught first and we will get out of the try block.

Is multiple try catch possible? ›

You cannot have multiple try blocks with a single catch block. Each try block must be followed by catch or finally.

Can we use 2 Catch block with one try? ›

Yes, we can define one try block with multiple catch blocks in Java. Every try should and must be associated with at least one catch block.

Can you mix Python 2 and 3? ›

Don't "mix". When the various packages and modules are available in Python 3, use the 2to3 conversion to create Python 3. You'll find some small problems. Fix your Python 2 so that your package works in Python 2 and also works after the conversion.

Can I use try except in a loop Python? ›

Continue in Error Handling—Try, Except, Continue. If you need to handle exceptions in a loop, use the continue statement to skip the “rest of the loop”. print(" But I don't care! ") for number in [1, 2, 3]: try: print(x) except: print("Exception was thrown") print(" But I don't care!

What happens after try except? ›

If an exception occurs during execution of the try clause, the rest of the clause is skipped. Then, if its type matches the exception named after the except keyword, the except clause is executed, and then execution continues after the try/except block.

Is try except a conditional? ›

Try-except statements are another selection structure in Python. Like if , elif and else statements, a try-except statements select a particular block of code to run based on a condition. Unlike if , elif and else clauses, try-except blocks are not based on logical conditions.

Can you have two except statements? ›

🔹 Multiple Except Clauses

A try statement may have more than one except clause, to specify handlers for different exceptions. At most one handler will be executed. In this example, we have two except clauses.

Does try except continue? ›

With try and except , even if an exception occurs, the process continues without terminating.

Can a try except block have? ›

How many except statements can a try-except block have? Explanation: There has to be at least one except statement.

Why is it best practice to have multiple Except? ›

Why is it best practice to have multiple except statements with each type of error labeled correctly? Ensure the error is caught so the program will terminate In order to know what type of error was thrown and the.

How multiple exceptions are caught in a single program? ›

Multiple Catch Block in Java

Starting from Java 7.0, it is possible for a single catch block to catch multiple exceptions by separating each with | (pipe symbol) in the catch block. Catching multiple exceptions in a single catch block reduces code duplication and increases efficiency.

Does Try Catch affect performance? ›

In general, wrapping your Java code with try/catch blocks doesn't have a significant performance impact on your applications. Only when exceptions actually occur is there a negative performance impact, which is due to the lookup the JVM must perform to locate the proper handler for the exception.

Is try catch inefficient? ›

This answer will obviously vary from compiler to compiler and application to application, but generally yes — “try and catch” is slower than some of the other canonical alternatives to error handling.

Is exception handling cheap and efficient? ›

As a rule of thumb, exception handling is extremely cheap when you don't throw an exception. It costs nothing on some implementations. All the cost is incurred when you throw an exception: that is, “normal code” is faster than code using error-return codes and tests. You incur cost only when you have an error.

What can hackers do with Python? ›

Python is used among hacking professionals for its powerful and user-friendly libraries. It provides readability and simplicity, which can help you complete your tasks more quickly and easily. Python libraries are also used for code-cracking, decoding, network scanning, and even network attacks.

What are the 3 errors in Python? ›

In python there are three types of errors; syntax errors, logic errors and exceptions.

Can you break a try catch? ›

Yes, it'll break the loop.

Does try catch catch all errors? ›

So, try... catch can only handle errors that occur in valid code. Such errors are called “runtime errors” or, sometimes, “exceptions”.

How many catches can use try? ›

A try block can be followed by one or more catch blocks.

Can we use finally without except in Python? ›

It can not do both. Since the finally block is commonly used as a cleanup handler, it makes sense for the return to take priority here.

Is nested try except bad? ›

Although this is sometimes unavailable, nesting try/catch blocks severely impacts the readability of the source code as it makes it difficult to understand which block will catch which exception.

Why finally is used in Python? ›

It defines a block of code to run when the try... except...else block is final. The finally block will be executed no matter if the try block raises an error or not. This can be useful to close objects and clean up resources.

Should you avoid try except Python? ›

The except block should only catch exceptions you are prepared to handle. If you handle an unexpected error, your code may do the wrong thing and hide bugs. An else clause will execute if there were no errors, and by not executing that code in the try block, you avoid catching an unexpected error.

Can try except be used to catch invalid keyboard input? ›

You can use the try-except block to do keyboard input validation.

Can we write finally without try catch? ›

Yes, it is not mandatory to use catch block with finally.

Can we return in try block? ›

you can use a return statement inside the try block, but you have to place another return outside the try block as well. If you pass true while calling sayHello method, it would return from try block. A return statement has to be at the method level instead of at any other specific level.

Can we throw exception in finally block? ›

Some resource cleanup, such as closing a file, needs to be done even if an exception is thrown. To do this, you can use a finally block. A finally block always executes, regardless of whether an exception is thrown. The following code example uses a try / catch block to catch an ArgumentOutOfRangeException.

Is it bad to use try catch? ›

With a try catch, you can handle an exception that may include logging, retrying failing code, or gracefully terminating the application. Without a try catch, you run the risk of encountering unhandled exceptions. Try catch statements aren't free in that they come with performance overhead.

Is nested try-except bad? ›

Although this is sometimes unavailable, nesting try/catch blocks severely impacts the readability of the source code as it makes it difficult to understand which block will catch which exception.

Why use try-except instead of if else Python? ›

The if-else block works preemptively and stops the error from occurring while the try-except block handles the error after it has occurred.

Why is try except pass bad? ›

The except:pass construct essentially silences any and all exceptional conditions that come up while the code covered in the try: block is being run. What makes this bad practice is that it usually isn't what you really want.

Why you should avoid try-catch? ›

Error handling mechanisms like exceptions cause deviations in the usual control flow of the program. These deviations make it harder to reason about the program and are often the source of bugs in the program.

How many except statements can a try except? ›

1. How many except statements can a try-except block have? Answer: d Explanation: There has to be at least one except statement.

What happens if you don't treat something as an exception? ›

if you don't handle exceptions

When an exception occurred, if you don't handle it, the program terminates abruptly and the code past the line that caused the exception will not get executed.

What happens if except clause is written without any exception type? ›

If there is no exception, then only try clause will run, except clause will not get executed. If any exception occurs, the try clause will be skipped and except clause will run. If any exception occurs, but the except clause within the code doesn't handle it, it is passed on to the outer try statements.

Can we have catch () without try? ›

Yes, It is possible to have a try block without a catch block by using a final block. As we know, a final block will always execute even there is an exception occurred in a try block, except System. exit() it will execute always.

Is IF statement faster than try except? ›

Now it is clearly seen that the exception handler ( try/except) is comparatively faster than the explicit if condition until it met with an exception. That means If any exception throws, the exception handler took more time than if version of the code.

Does try Except end function? ›

In Python, try and except are used to handle exceptions (= errors detected during execution). With try and except , even if an exception occurs, the process continues without terminating. You can use else and finally to set the ending process.

Videos

1. Exception Handling in Python | TRY EXCEPT in Python | Python Tutorial for Beginners #8
(techTFQ)
2. python try except and best practices (beginner - intermediate) anthony explains #359
(anthonywritescode)
3. Learn Python in Arabic #091 - Exceptions Handling Try, Except, Else, Finally
(Elzero Web School)
4. #63 Python Tutorial for Beginners | Exception Handling
(Telusko)
5. Try Except Exception Handling In Python | Python Tutorials For Absolute Beginners In Hindi #24
(CodeWithHarry)
6. Python Exception Handling (Use Try..Except to Catch Errors!) #25
(Programiz)
Top Articles
Latest Posts
Article information

Author: Jerrold Considine

Last Updated: 12/23/2022

Views: 5642

Rating: 4.8 / 5 (78 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Jerrold Considine

Birthday: 1993-11-03

Address: Suite 447 3463 Marybelle Circles, New Marlin, AL 20765

Phone: +5816749283868

Job: Sales Executive

Hobby: Air sports, Sand art, Electronics, LARPing, Baseball, Book restoration, Puzzles

Introduction: My name is Jerrold Considine, I am a combative, cheerful, encouraging, happy, enthusiastic, funny, kind person who loves writing and wants to share my knowledge and understanding with you.