int object has no attribute append

Поэтому я просмотрел похожие вопросы, и у меня по-прежнему возникает одна и та же проблема, и я не могу понять это. Для этого назначения программирования я создаю упрощенную версию лексического анализа для небольшого подмножества лексики Clite. Я извлекаю токены из входного файла, выводя результаты моего анализа. Я создаю таблицу символов для найденных идентификаторов с использованием словаря. Когда я нахожу те же идентификаторы на разных строках, мне нужно добавить в таблицу символов строку, в которой она была найдена. Например, я нахожу идентификатор «number18» в строке 2 и снова в строке 7. Таким образом, таблица символов должна будет идти от до

Проблема возникает, когда я пытаюсь добавить новый номер строки в текущую запись словаря. Я получаю сообщение об ошибке, как я писал в заголовке вопроса. Здесь мой код пока

Вы сначала задали свои значения dict как int :

но потом вы пытаетесь обработать его, как будто это list :

Начните со list содержащим ваш первый int :

и будет работать .append() .

Кроме того, вы можете использовать defaultdict :

а затем добавьте по желанию без необходимости проверять, есть ли ключ:

В другой части выше вы добавляете integer первый раз. Поэтому, когда вы будете использовать append следующий раз, вы получите эту ошибку.

Скорее заверните целое число y в списке [y] , когда вы добавите свое значение в первый раз к своему dict

Ну, вы уже знаете из @Martijn ответ, что использование defaultdict будет лучшим вариантом здесь, так как тогда вам не нужно проверять наличие containment key .

Но, все еще относясь к тому, как вы проверяете ключ в dict:

Когда я запускаю этот код, возникает следующая ошибка: я новичок в программировании, и я знаю, что у меня есть множество бесполезных массивов. Я не знаю, где моя ошибка, так как я объявил j как массив. Я полностью из идей.

4 ответа

2 Решение DhruvPathak [2012-08-09 09:20:00]

j был использован как список aa, так и целое число. Используйте j только для целочисленного имени, назовите список на что-то еще.

Внимательно посмотрите на следующий фрагмент кода:

Обратите внимание, как вы сначала вызываете .append в j (который вы инициализировали списком ранее), а затем используйте его как переменную цикла, вложенную в тот же цикл.

Используйте лучше, значимые имена переменных в вашем коде, чтобы избежать этого класса ошибок. Переименуйте либо переменную цикла, либо переменную списка модулей.

1 Alex [2012-08-09 09:17:00]

Кажется, вы используете переменную ‘j’ как int-counter в цикле, то есть список ‘j’ заменяется на int ‘j’, где вы не можете добавить что-то. Решение. Переименуйте переменные с более сложными именами.

Ваш отступ сломан, но кажется, что эта линия является виновником:

В первый раз j является массивом, но затем вы скрываете его с помощью int j . Трудно обнаружить, поскольку то, что вызывает ошибку, похоже, происходит после него, но поскольку оно в цикле, это не так. Попробуйте переименовать это целое число.

Мой вопрос состоял в том, чтобы сделать программу python, которая заполняет основную диагональ квадратной матрицы номером строки и справа налево по диагонали с ее номером столбца. Остальные элементы матрицы инициализируются суммой индексов элементов.

Поэтому я подошел к этой проблеме со следующим кодом, но когда я пытался ее запустить, он дал следующую ошибку:

Также дайте мне знать, есть ли другой способ сделать 2D-список на python и ввести в него данные от пользователя!

Traceback (most recent call last): File «/home/shinigami/prac5.py», line 21, in a[i].append(p) AttributeError: ‘int’ object has no attribute ‘append’

Ваша переменная a является list int eers. Когда вы пишете a[i].append(. ) вы пытаетесь вызвать метод append для типа int , что вызывает ошибку.

Написание a.append(. ) отлично, потому что a — это list , но как только вы индексируете этот list , вы имеете дело с числами в списке, и у них нет метода append . Например:

Просто убедитесь, что вы используете правильные типы. Логика в вашем коде в настоящее время очень сложна, поэтому вы должны ее упростить.

Также дайте мне знать, это их другой способ сделать 2D-лист

Вы можете использовать списки. Например:

Выше было протестировано с использованием Python3, но при необходимости вы можете приспособить его к Python2.

Оцените статью