簡體   English   中英

從偵聽器內部引用全局變量時出現pynput UnboundLocalError

[英]pynput UnboundLocalError when referencing global variable from inside listener

我正在編寫一個腳本,以便在用戶每次按下按鍵時鍵入一些內容。 我最終不得不在偵聽器之前定義一個全局變量,並從偵聽器內部對其進行引用,盡管事先進行了明確定義,但還是遇到了UnboundLocalError。 這是代碼:

import pynput

controller = pynput.keyboard.Controller()
is_typing = False
def on_press(key):
    if not is_typing:
        is_typing = True
        controller.type('test')
        is_typing = False

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

在腳本運行時按一個鍵后,出現此錯誤:

Traceback (most recent call last):
  File ".\typer.py", line 12, in <module>
    listener.join()
  File "C:\Python35\lib\site-packages\pynput\_util\__init__.py", line 199, in join
    six.reraise(exc_type, exc_value, exc_traceback)
  File "C:\Python35\lib\site-packages\six.py", line 692, in reraise
    raise value.with_traceback(tb)
  File "C:\Python35\lib\site-packages\pynput\_util\__init__.py", line 154, in inner
    return f(self, *args, **kwargs)
  File "C:\Python35\lib\site-packages\pynput\keyboard\_win32.py", line 237, in _process
    self.on_press(key)
  File "C:\Python35\lib\site-packages\pynput\_util\__init__.py", line 75, in inner
    if f(*args) is False:
  File ".\typer.py", line 6, in on_press
    if not is_typing:
UnboundLocalError: local variable 'is_typing' referenced before assignment

我在Windows 10,Python 3.5.2和Pynput 1.4上運行

您正在訪問尚未聲明的函數中的全局聲明變量,因為pynput的鍵盤監聽器被視為Thread處理,並且具有不同的作用域 因此,您必須在訪問變量之前將其指定為全局變量。

def on_press(key):
 # global is_typing
 print globals()
 global is_typing
 if not is_typing:
    is_typing = True
    controller.type('test')
    is_typing = False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM