Использование декоратора Python в Spyder IDE - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь написать декоратор в моих python кодах. Когда я компилирую его в блокнот Jupyter, он работает нормально, но когда я запускаю коды в IDE Spyder, я получаю сообщение об ошибке.

def search_func(sheetname):
    def insider(f):
        file = openpyxl.load_workbook("Excelfile.xlsx")
        current_sheet = file[sheetname]
        f(current_sheet)
    return insider

@search_func('Passwords')
def Longin(current_sheet):
    Name = User_name.get() + str(Password.get())
    for i in range(1,current_sheet.max_row +1):
       for j in range(1,current_sheet.max_column+1):
           if current_sheet.cell(i,j).value == Name:
               print("Hello")

Я получаю сообщение об ошибке: "Longin () отсутствует 1 обязательный позиционный аргумент: 'current_sheet'"

Кто-нибудь может мне помочь, пожалуйста?

Оцените ваше время ,

Приветствия

1 Ответ

1 голос
/ 11 февраля 2020

Вы поменяли местами функцию декоратора и аргументы в объявлениях декоратора.

Внешняя функция должна получить f, а внутренняя - sheetname.

def decorator(function):
        def wrapper(*args, **kwargs):
            funny_stuff()
            something_with_argument(argument)
            result = function(*args, **kwargs)
            return result
        return wrapper

Пример взят из декоратор с аргументами . Также показано, как создать декоратор, который получает аргументы.

...