Hỏi cách custom exception trong Python để dùng cho tất cả các hàm trong một chương trình

Chào cả nhà,
Mình đang học thêm về python3, trước đây mình hay để try-catch ở mọi hàm. Gần đây mình tìm thêm được một cách là tạo một decorater:

def catch_exception(f):
    def wrapper(*args, **kwargs):
        status_code = 200
        try:
            data = f(*args, **kwargs)
        except Exception as e:
            raise e
        return data, status_code
    return wrapper

Cái này chạy rất tốt, nhưng mình muốn thêm 1 messeage khi sảy ra lỗi để có thêm thông tin. Ví dụ là

        except Exception as e:
            # print(f"Đã sảy ra lỗi khi {action}: {str(e)}")
            raise e

Trong đó action là tên hàm hoặc mô tả của hàm. Mình đang mò cách mà chưa biết mần sao lên đây xin được mọi người chỉ giáo. Mình mong muốn trong mỗi bằng một cách nào đó, action mình sẽ define ở mỗi function (trong document chẳng hạn) để thằng catch_exception có để đọc và in ra một cách tự động. Ví dụ như là:

@catch_exception
def div_function(a,b):
    ''' Hàm chia '''
    return a/b

Nếu có lỗi sảy ra thì mình mong muốn nhận được thông báo là:

Đã có lỗi sảy ra tại Hàm chia: float division by zero

Chân thành cảm ơn cả nhà.
P/s: nếu có suggest gì mình xin tiếp thu để cải thiện.

2 Likes

muốn lấy doc của function truyền vào thì xài f.__doc__ là được :V

print(f"Đã xảy ra lỗi khi {f.__doc__}: {str(e)}")
7 Likes

Cảm ơn bạn rất nhiều, dnh không thông báo cho mình có rep mới nên mình không có biết.
Chân thành cảm ơn bạn rất nhiều.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?