Я прочитал другие темы, связанные с этой ошибкой, и кажется, что моя проблема имеет интересное отличие от всех постов, которые я до сих пор читал, а именно, все остальные посты до сих пор имеют ошибку в отношении любого созданного пользователем класс или встроенный системный ресурс. Я испытываю эту проблему при вызове функции, я не могу понять, для чего это может быть. Любые идеи?
BOX_LENGTH = 100
turtle.speed(0)
fill = 0
for i in range(8):
fill += 1
if fill % 2 == 0:
Horizontol_drawbox(BOX_LENGTH, fillBox = False)
else:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
for i in range(8):
fill += 1
if fill % 2 == 0:
Vertical_drawbox(BOX_LENGTH,fillBox = False)
else:
Vertical_drawbox(BOX_LENGTH,fillBox = True)
Сообщение об ошибке:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
python
python-3.x
тяпка ничья lion4
источник
источник
Horizontol_drawbox
функции? Если он начинается сfillBox
, то это ошибка (назначается один раз с позиционным аргументом, а второй - с аргументом ключевого слова).Ответы:
Это происходит, когда указывается ключевой аргумент, который перезаписывает позиционный аргумент. Например, давайте представим функцию, которая рисует цветную рамку. Функция выбирает цвет, который будет использоваться, и делегирует рисунок окна другой функции, передавая все дополнительные аргументы.
Тогда звонок
не удастся, потому что два значения присвоены
color
:"blellow"
как позиционное и"green"
как ключевое слово. (painter.draw_box
Предполагается принятьheight
иwidth
аргументы).Это легко увидеть в примере, но, конечно, если смешать аргументы при вызове, отладить будет нелегко:
Здесь,
color
назначается20
, а затемargs=[30]
иcolor
вновь назначен"green"
.источник
color
аргументом. Проблема была немного в другой - мойmodel_matrix
аргумент стал содержать только ключевые слова, а в некотором устаревшем коде он передавался как позиционный аргумент. Новый API был ожидаемымcolor
, а вместо него получил матрицу 4x4.When a keyword argument is specified that overwrites a positional argument
. Но почему последний может работать? Какое правило, когда Python присваивает аргументы. Спасибо.У меня была та же проблема, которую действительно легко решить, но мне потребовалось время, чтобы разобраться.
Я скопировал декларацию туда, где я ее использовал, и оставил там аргумент «я», но мне потребовались годы, чтобы осознать это.
я имел
но это должно было быть
источник
self
на имя класса. ;)Это также происходит, если вы забываете
self
объявление внутри методов класса.Пример:
Не удается вызвать это как
self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
с:РАБОТАЕТ :
источник
self
аргумент внутри объявления функции. т.е. то, что должно бытьdef myFunction(self, a, b, c='123')
написано какdef myFunction(a, b, c='123')
. И посколькуb
принимает список иc
принимает скаляр, при отсутствии self аргументы ошибаются, и в конечном итоге вводb
переходит кc
, вызывая ошибку «несколько аргументов». Я совершаю эту ошибку, потому что тестировал этот внутренний метод вне класса и забыл добавить егоself
обратно. Надеюсь, это поможет кому-то другому!@staticmethod
которая может быть лучшим подходом, когдаself
она по сути не требуется.Моя проблема была похожа на Q --- ten, но в моем случае это было то, что я забыл предоставить аргумент self для функции класса:
Должен стать
Эту ошибочную реализацию трудно увидеть при вызове метода класса как:
Что даст
TypeError: got multiple values for argument
. Надеюсь, остальные ответы здесь достаточно ясны, чтобы любой мог быстро понять и исправить ошибку. Если нет, надеюсь, этот ответ вам поможет!источник
Проще говоря, вы не можете делать следующее:
Потому что вы передаете переменную y в функцию дважды: один раз как kwargs и один раз как объявление функции.
источник
Меня привели сюда по причине, явно не упомянутой в ответах, чтобы избавить других от неприятностей:
Ошибка также возникает, если порядок аргументов функции изменился - по той же причине, что и в принятом ответе: позиционные аргументы конфликтуют с аргументами ключевого слова.
В моем случае это произошло из-за того, что порядок аргументов
set_axis
функции Pandas изменился между 0,20 и 0,22:Использование часто встречающихся примеров для set_axis приводит к этой запутанной ошибке, поскольку при вызове:
до 0.22
['a', 'b', 'c']
присваивается оси, потому что это первый аргумент, а затем позиционный аргумент предоставляет "несколько значений".источник