Python sys.exc_info() Method

Musfirah Waseem Sep 05, 2022
  1. Syntax
  2. Parameters
  3. Returns
  4. Example Codes
Python sys.exc_info() Method

Python sys.exc_info() method is an efficient way of getting information about the current exception that has occurred and is handled by the system. The data returned by this method is specific to both the current system thread and the current stack frame.

Syntax

sys.exc_info()

Parameters

no parameters It is a non-callable object.

Returns

The method’s return type is a tuple consisting of three values. The values are as follows: (type, value, traceback)

  1. type: denotes the type of exception being handled.
  2. value: it gets the instance of an exception type.
  3. traceback: it returns a traceback object that encapsulates the system call stack at the point where the exception originated.

Note that if the stack system handles no exception, a tuple containing three None values is returned.

Example Codes

Work With the sys.exc_info() Method

import sys
import math

try:
    x = 1 / 0
except:
    tuples = sys.exc_info()
    print(tuples)

Output:

(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x7f6607d72240>)

Any number divided by 0 is not defined, so an exception is thrown. The method sys.exc_info() gives detailed information about the exception.

Break Down the Tuple Returned by the sys.exc_info() Method

import sys
import math

try:
    x = 1 / 0
except:
    tuples = sys.exc_info()
    print("Type: ", tuples[0])
    print("Value: ", tuples[1])
    print("Traceback: ", tuples[2])

Output:

Type:  <class 'ZeroDivisionError'>
Value:  division by zero
Traceback:  <traceback object at 0x7efc2f10b240>

The method sys.exc_info() gives us information about the exception in the form of a tuple. The tuple can also be accessed element-wise, as shown above.

Use Mathematical Equation With the sys.exc_info() Method

import sys
import math

a = 1
b = -8
c = 5

try:
    root1 = (-(b) + (math.sqrt(b * b - 4 * a * c))) / (2 * a)
    root2 = (-(b) - (math.sqrt(b * b - 4 * a * c))) / (2 * a)
    print("Two real and distinct roots: ", root1, root2)

except:
    e, p, t = sys.exc_info()
    print("Two imaginary and distinct roots! Error generated: ", e, p)

a = 2
b = 2
c = 1

try:
    root1 = (-(b) + (math.sqrt(b * b - 4 * a * c))) / (2 * a)
    root2 = (-(b) - (math.sqrt(b * b - 4 * a * c))) / (2 * a)
    print("Two real and distinct roots: ", root1, root2)

except:
    e, p, t = sys.exc_info()
    print("Two imaginary and distinct roots! Error generated: ", e, p)

Output:

Two real and distinct roots:  7.3166247903554 0.6833752096446002
Two imaginary and distinct roots! Error generated:  <class 'ValueError'> math domain error

In the above code, we implemented the quadratic formula. The answers are shown in floating point notations when we have two distinct real roots.

In the second attempt, the output was two different imaginary numbers that the system couldn’t process, so an exception was thrown.

Musfirah Waseem avatar Musfirah Waseem avatar

Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.

LinkedIn

Related Article - Python Sys