Ошибка модуля клавиатуры Python: ошибка типа: объект «NoneType» не может быть вызван

#python #python-3.x #python-keyboard

Вопрос:

Мой код таков:

 import keyboard

pressed = ""

def on_key_press():
    print("Key pressed.")
    global pressed
    # Took me 1 hour to figure out this.
    if charset.chars.__contains__(keyboard.read_key()):
        print("processing slangs...")
        print("*process*")
    else:
        print("registered key.")
        pressed  = keyboard.read_key()
    print(pressed)

keyboard.on_press(on_key_press())
keyboard.wait()
 

Я запустил его как root.
Когда я нажимаю клавишу, она печатает ключ по назначению.
Но когда я нажимаю любую клавишу сразу после этого, она просто возвращает ошибку, вот так:

 Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/keyboard/_generic.py", line 22, in invoke_handlers
    if handler(event):
  File "/usr/local/lib/python3.9/dist-packages/keyboard/__init__.py", line 474, in <lambda>
    return hook(lambda e: e.event_type == KEY_UP or callback(e), suppress=suppress)
TypeError: 'NoneType' object is not callable
 

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

Ответ №1:

Я думаю, что единственное, что вам нужно, это удалить скобки при вызове on_key_press функции

 
keyboard.on_press(on_key_press())
 

к этому:

 
keyboard.on_press(on_key_press)
 

я предполагаю, что метод keyboard.on_press принимает в качестве аргумента функцию, а не вызываемый объект

Комментарии:

1. Вы запустили код TypeError: on_key_press() takes 0 positional arguments but 1 was given

Ответ №2:

не читать документы-это как
Функция keyboard.on_press() вызывает обратный вызов, а не функцию. Этот код показывает, что:

 import keyboard

def test(a):
    print(a)

keyboard.on_press(test)
keyboard.wait()
 

Когда вы нажимаете случайные клавиши, он распечатывается KeyboardEvent(<key> down) . Строку ключа можно извлечь с помощью keyboard.read_key() .