Объект dict не имеет атрибута добавления сообщения об ошибке в кейлоггере Python

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

  File "C:/Users/PycharmProjects/untitled2/keylogertake3", line 9, in on_press
    keys.append(Key)
AttributeError: 'dict' object has no attribute 'append'  

Process finished with exit code 1

Код:

import pynput
from pynput.keyboard import Key, Listener
count = 0
keys = {}

def on_press(key):
    global keys, count

    keys.append(Key)
    count += 1
    print("({0} pressed".format(key))

if count >= 10:
    count = 0
    write_file(keys)
    keys={}
def write_file(keys):
  with open ("keyloger.txt","a")as f:
    for key in keys:
     f.write(str(key))

with Listener(on_press=on_press)as listener:
    listener.join()

введите здесь описание изображения


person victor    schedule 22.02.2020    source источник
comment
Дамп кода — это не вопрос, и вы должны опубликовать сообщение об ошибке в виде текста, а не изображения. См. Как спросить.   -  person kaya3    schedule 22.02.2020
comment
Если я проголосую за повторное открытие, он будет просто закрыт как дубликат одного из этих вопросов: объект 'dict' не имеет атрибута 'append' / AttributeError: у объекта 'dict' нет атрибута 'append' / python добавить словарь в существующий словарь - AttributeError: объект 'dict' не имеет атрибута 'append'/объект 'dict' не имеет атрибута 'append' Json / и т.д.   -  person kaya3    schedule 22.02.2020


Ответы (1)


В этом блоке кода много ошибок.

keys = {} инициализирует keys пустым словарем. В словаре нет метода append(), поскольку его основная цель — связать ключи со значениями. Эта неверная строка встречается в двух местах исходного кода.

Чтобы вместо этого инициализировать self.items как пустой список, измените назначение на:

keys = []

В дополнение к этой ошибке отступы неверны в нескольких строках.

Исправленный код выглядит следующим образом.

import pynput
from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
    global keys, count
    keys.append(Key)
    count += 1
    print("\n"+"{0} pressed".format(key))

if count >= 10:
    count = 0
    write_file(keys)
    keys = []

def write_file(keys):
    with open ("keyloger.txt","a") as f:
        for key in keys:
            f.write(str(key))

with Listener(on_press=on_press) as listener:
    listener.join()

Выход:

'a' pressed
a
'b' pressed
b
'c' pressed
c
person karel    schedule 22.02.2020
comment
спасибо, agian karel, еще одна последняя вещь, файл кейлоггера, который я не могу найти, когда пытался удалить его и создать (keyloger.txt,w), но когда это происходит, файл не создается, чем помочь? - person victor; 22.02.2020