Я хотел использовать декоратор для обработки исключений в моем приложении PyQt5:
def handle_exceptions(func):
def func_wrapper(*args, **kwargs):
try:
print(args)
return func(*args, **kwargs)
except Exception as e:
print(e)
return None
return func_wrapper
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
loadUi("main_window.ui",self)
self.connect_signals()
def connect_signals(self):
self.menu_action.triggered.connect(self.fun)
@handle_exceptions
def fun(self):
print("hello there!")
При запуске я получаю следующее исключение:
fun() takes 1 positional argument but 2 were given
Вывод False
(выводит аргументы в декораторе).
Интересно то, что когда я запускаю функцию fun()
непосредственно с помощью self.fun()
в конструкторе или комментирую декоратор, все работает. Похоже, декоратор добавляет дополнительный аргумент, но только когда функция вызывается сигналом. Что происходит?