Передайте аргумент ключевого слова в 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