w3resource
w3resource logo

Understanding Python Try-Except: Examples and Use Cases

(追記) (追記ここまで)
(追記) (追記ここまで)

Introduction to Python’s Try-Except Mechanism

Python's 'try-except' mechanism is a powerful way to handle errors and exceptions that might occur during the execution of a program. In addition to 'try' and 'except', Python provides 'else' and 'finally' blocks, which allow for even more fine-grained control over what happens when exceptions occur-or don't. Here we focus on practical examples with minimal theory, so you can see how these blocks work in real-world scenarios.

Example 1: Basic 'try-except' Block

In this example, the conversion of the string "100" to an integer succeeds, so the 'except' block is never executed. The 'try' block runs successfully, demonstrating a simple use case where no error occurs.

Code:

try:
 # Attempt to convert a string to an integer, which will succeed
 number = int("100")
 print(f"Converted number: {number}")
except ValueError:
 # This block will not be executed since no exception occurs
 print("This will not print.")

Output:

Converted number: 100

Example 2: Handling an Exception with 'except'

Here, the string "Python" cannot be converted to an integer, so a 'ValueError' is raised and caught by the 'except' block. This prevents the program from crashing and allows you to handle the error gracefully.

Code:

try:
 # Attempt to convert an invalid string to an integer
 number = int("Python")
except ValueError:
 # This block handles the ValueError that occurs during conversion
 print("Invalid input! Cannot convert 'Python' to an integer.")

Output:

Invalid input! Cannot convert 'Python' to an integer.

Explanation:

  • When the 'int("Python")' operation fails, a 'ValueError' is raised.
  • The 'except' block catches this specific error and handles it by printing a message.

Example 3: Using Multiple 'except' Blocks

This example demonstrates handling different exceptions separately. The 'ZeroDivisionError' is caught by the appropriate 'except' block, while the ‘ValueError’ block is skipped since no conversion error occurs.

Code:

try:
 # Attempt to divide a number by zero
 result = 100 / 0
except ZeroDivisionError:
 # Handle division by zero
 print("Cannot divide by zero!")
except ValueError:
 # Handle conversion errors (this block won't run in this case)
 print("Conversion error occurred.")

Output:

Cannot divide by zero!

Explanation:

  • You can have multiple 'except' blocks to handle different types of exceptions.
  • Python will execute the first 'except' block that matches the type of exception raised.

Example 4: 'else' Block

In this example, the division operation is successful, so the 'else' block runs, printing the result. The 'else' block allows you to execute code only when the 'try' block doesn't raise any exceptions.

Code:

try:
 # Attempt to divide two numbers
 result = 100 / 2
except ZeroDivisionError:
 # Handle division by zero
 print("Cannot divide by zero!")
else:
 # This block runs only if no exception occurs
 print(f"Division successful: {result}")

Output:

Division successful: 50.0

Explanation:

  • The 'else' block runs only if the ‘try’ block executes successfully without any exceptions.
  • It's useful for code that should run only when no errors occur.

Example 5: 'finally' Block

In this example, we attempt to open a non-existent file, raising a 'FileNotFoundError'. The 'finally' block executes regardless of the outcome, demonstrating its use for actions that should always be performed.

Code:

try:
 # Attempt to open a file that doesn't exist
 file = open("test.txt", "r")
except FileNotFoundError:
 # Handle the exception if the file is not found
 print("File not found!")
finally:
 # This block always runs, whether an exception occurred or not
 print("This will always execute.")

Output:

File not found!
This will always execute.

Explanation:

  • The 'finally' block runs no matter what, even if an exception is raised.
  • It's often used for cleanup actions, like closing files or releasing resources.

Example 6: Combining 'try-except-else-finally'

This example showcases a complete 'try-except-else-finally' structure. The user is prompted to input a number, which is then divided by 2. The code handles invalid inputs and ensures that a final message is printed regardless of what happens during execution.

Code:

try:
 # Attempt to read a number from the user and divide it by 2
 number = int(input("Input a number: "))
 result = number / 2
except ValueError:
 # Handle invalid input conversion
 print("Invalid input! Please enter a number.")
except ZeroDivisionError:
 # Handle division by zero (though it won't occur in this case)
 print("Cannot divide by zero!")
else:
 # This block runs only if no exceptions are raised
 print(f"Half of {number} is {result}")
finally:
 # This block always runs
 print("Thank you for using our division tool.")

Output:

Input a number: 34
Half of 34 is 17.0
Thank you for using our division tool.
Input a number: 45
Half of 45 is 22.5
Thank you for using our division tool.

Explanation:

  • All four blocks ('try', 'except', 'else', and 'finally') are combined here.
  • The 'try' block attempts to convert user input to an integer and divide it.
  • The 'except' blocks handle potential errors.
  • The 'else' block runs only if no exceptions occur.
  • The 'finally' block runs at the end, no matter what.

Example 7: Nested try-except Blocks

This example demonstrates how you can nest 'try-except' blocks to handle errors in different contexts. The division by zero is caught by the inner 'except', while the outer 'except' catches an index error, showing how to manage multiple potential exceptions in different parts of the code.

Code:

try:
 # Outer try block
 try:
 # Attempt to divide by zero
 result = 10 / 0
 except ZeroDivisionError:
 # Handle division by zero
 print("Division by zero in inner try block.")
 # Attempt to access an invalid index
 my_list = [1, 2, 3]
 print(my_list[5])
except IndexError:
 # Handle the invalid index access in the outer try block
 print("Index out of range in outer try block.")

Output:

Division by zero in inner try block.
Index out of range in outer try block.

Explanation:

  • 'try-except' blocks can be nested, allowing for more specific error handling in different parts of your code.
  • The inner 'try-except' handles division by zero, while the outer 'try-except' handles an index error.

PREV : Python Exceptions
NEXT :Python Raising Eception

Test your Python skills with w3resource's quiz



Follow us on Facebook and Twitter for latest update.

(追記) (追記ここまで)


(追記) (追記ここまで)
(追記) (追記ここまで)


AltStyle によって変換されたページ (->オリジナル) /