Python sys.exc_info() method



The Python sys.exc_info() method that returns a tuple containing information about the most recent exception caught by an except clause. The tuple consists of three elements, they are the exception type, the exception value and a traceback object.

This method is particularly useful for error handling and debugging as it provides detailed information about the exception context. By using 'sys.exc_info()' method developers can programmatically access and manipulate exception details by improving error logging and handling capabilities within their applications.

Syntax

Following is the syntax and parameters of Python sys.exc_info() method −

sys.exc_info()

Parameter

This method does not return any values.

Return value

This method returns tuple containing three values (type, value, traceback).

Example 1

Following is the basic example in which, a ZeroDivisionError is raised and caught. The sys.exc_info() method retrieves information about the exception −

import sys

try:
    1 / 0
except ZeroDivisionError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print(f"Exception type: {exc_type}")
    print(f"Exception value: {exc_value}")
    print(f"Traceback object: {exc_traceback}")

Output

Exception type: <class 'ZeroDivisionError'>
Exception value: division by zero
Traceback object: <traceback object at 0x0000016DCBD35000>

Example 2

This example uses sys.exc_info() method to retrieve the exception details and then uses the traceback module to print the traceback details −

import sys
import traceback

def divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print(f"Exception type: {exc_type}")
        print(f"Exception value: {exc_value}")
        print("Traceback details:")
        traceback.print_tb(exc_traceback)

divide(1, 0)

Output

Exception type: <class 'ZeroDivisionError'>
Exception value: division by zero
Traceback details:
  File "\sample.py", line 6, in divide
    return a / b
           ~~^~~

Example 3

Now in this example we show how nested exception handling can be structured in custom functions −

import sys
import traceback

try:
    try:
        result = int('not a number')
    except ValueError:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print("Inner exception info:")
        print(f"  Type: {exc_type}")
        print(f"  Value: {exc_value}")
        traceback.print_tb(exc_traceback)
        # Re-raise the exception to the outer try block
        raise
except Exception as e:
    print("Outer exception info:")
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print(f"  Type: {exc_type}")
    print(f"  Value: {exc_value}")
    traceback.print_tb(exc_traceback)

Output

Inner exception info:
  Type: <class 'ValueError'>
  Value: invalid literal for int() with base 10: 'not a number'
  File "\sample.py", line 6, in <module>
    result = int('not a number')
             ^^^^^^^^^^^^^^^^^^^
Outer exception info:
  Type: <class 'ValueError'>
  Value: invalid literal for int() with base 10: 'not a number'
  File "\sample.py", line 6, in <module>
    result = int('not a number')
             ^^^^^^^^^^^^^^^^^^^
python_modules.htm
Advertisements
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy