Передайте аргумент ключевого слова в python декоратора

У меня есть функция-обертка, как это:

def check(func):
    @wraps(func)
    def wrap(*args, **kwargs):
        while 1:
            try:
                return func(*args, **kwargs)
            except AssertionError:
                print('Invalid Input')
            except ValueError:
                print('Invalid Input')
    return wrap

Однако я хочу сделать ввод ошибок настраиваемым. Я попробовал это:

def check(func, errorText='Invalid Input’):...

Используя это так:

@check(errorText = 'Input must be in {}'.format(tiles))

И получил это:

Traceback (most recent call last):
    @check(errorText = 'Input must be in {}'.format(tiles))
TypeError: check() missing 1 required positional argument: ‘func'

Я попробовал это:

...
def wrap(*args, errorText = ‘Invalid Input’, **kwargs):
...

И не получил ошибку, но он все еще напечатан Invalid Input как сообщение об ошибке.

Вот часть кода, который я использую:

@check
def getInt(_min, _max, _type, errorText = ’Number is not in correct range'):
    n = int(input("Enter {} number (inbetween {} and {}): ".format(_type, _min, _max)))
    assert _min <= n <= _max
    return n

@check
def setAt(board, new, errorText = ’Space is already filled.'):
    row = getInt(1, 5, 'row')-1
    col = getInt(1, 5, 'column')-1
    assert board[row][col] == '.'
    board[row][col] = new

@check
def getTile(errorText = ‘Input must be in {}’.format(tiles)):
    tile = input("Enter tile to choose: ").upper()
    assert tile in tiles
    return tile

0 ответов

Другие вопросы по тегам