Skip to content

Instantly share code, notes, and snippets.

@Priyanshu9898
Created March 7, 2023 07:13
Show Gist options
  • Save Priyanshu9898/9312aa06f4ec4b610f72faf049ae9f6a to your computer and use it in GitHub Desktop.
Save Priyanshu9898/9312aa06f4ec4b610f72faf049ae9f6a to your computer and use it in GitHub Desktop.
Custom Exception Handling Code
import sys
import logging
import pandas as pd
def error_message_detail(error, error_detail:sys):
_, _, exc_tb = error_detail.exc_info()
file_name = exc_tb.tb_frame.f_code.co_filename
error_message = "Error occured in Python Script name [{0}] Line No. [{1}] Error Message [{2}]".format(file_name, exc_tb.tb_lineno, str(error))
return error_message
class customException(Exception):
# Constructor or Initializer
def __init__(self, error_message, error_detail:sys):
super().__init__(self, error_message)
self.error_message = error_message_detail(error_message, error_detail=error_detail)
# __str__ is to print() the value
def __str__(self):
return self.error_message
def load_dataset(file_name):
try:
# load the dataset from file_name
df = pd.read_csv(file_name)
except FileNotFoundError as e:
raise customException('File not found', error_detail=sys)
except ValueError as e:
raise customException('Invalid file format', error_detail=sys)
if __name__ == "__main__":
try:
load_dataset('dataset.csv')
except customException as e:
print(e)
@Soad-Afify
Copy link

When I try to run this code I got 3 errors:

Module cannot be used as a type

Argument of type "Module("sys")" cannot be assigned to parameter "error_detail" of type "Module("sys")" in function "error_message_detail"
  Type "Module("sys")" cannot be assigned to type "Module("sys")"

"tb_frame" is not a known member of "None"

Can you please support

@sathish-mass
Copy link

Here is the modified code for exception.py

import sys
from src.logger import logging

def error_message_detail(error,error_detail=sys.exc_info()):
,,exc_tb=error_detail
if exc_tb is not None:
file_name = exc_tb.tb_frame.f_code.co_filename
line_number = exc_tb.tb_lineno
else:
file_name = "unknown"
line_number = "unknown"
error_message="Error occured in python script name [{0}] line number [{1}] error message[{2}]".format(
file_name,line_number,str(error))

return error_message

class CustomException(Exception):
def init(self,error_message,error_detail=sys.exc_info()):
super().init(error_message)
self.error_message=error_message_detail(error_message,error_detail=error_detail)

def __str__(self):
    return self.error_message

After this please also make the change in data_ingestion.py file

    except Exception as e:
        raise CustomException(e,sys.exc_info())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment