В коде, который генерирует ошибку, вы следующие в качестве заголовка функции:
def hello(input, *args):
Это превратит args
в кортеж всех позиционных аргументов. Код, который вы вставили в вопросе не вызывает ошибку:
>>> def hello(input, args):
... s = input.replace('%0', '{0}')
... v = s.format(args)
... return v
...
>>> hello('hello %0', 'stack')
'hello stack'
>>> def hello2(input, *args):
... s = input.replace('%0', '{0}')
... v = s.format(args)
... return v
...
>>> hello2('Hello %0', 'stack')
"Hello ('stack',)"
Чтобы заставить его работать, необходимо расширить кортеж: v = s.format(*args)
.
Я не уверен, какова фактическая цель этого кода, потому что он будет принимать только первый аргумент; независимо от того, сколько реальных аргументов вы послали к методу:
>>> def hello3(input, *args):
... s = input.replace('%0', '{0}')
... v = s.format(*args)
... return v
...
>>> hello3('hello %0', 'stack', 'world')
'hello stack'
Это происходит потому, что {0}
связывается с первым аргументом .format()
.
FWIW, я не могу воспроизвести это на Python 3.4 и на [Python 2.7] (http://ideone.com/kyaKGQ) – vaultah
Не называйте свою переменную 'input', то есть имя функции Python – CoryKramer
звездочку в 'def hello (input, * args)'? Это приведет к ошибке, которую вы опубликовали. – unutbu