首页 > 解决方案 > 使用带有 signal.pause() 函数的 try-except 语句

问题描述

我正在使用Raspberry Pi和图书馆gpiozero。我初始化一个连接到电路板的按钮,并希望在按住按钮时处理事件。为此,我尝试使用异常。下面是代码:

from signal import pause
from gpiozero import Button

class pressException( Exception ):
    pass

def raisePressException():
    raise pressException( 'Button held' )

push = Button( 5 )
push.when_held = raisePressException

try:
    pause()
except pressException:
    print( 'Exception accepted' )

但是,一旦我按住按钮,异常块就不会捕获此异常,因为它不是从 pause() 内部发出的。终端输出如下:

    Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib/python2.7/dist-packages/gpiozero/mixins.py", line 460, in held
    parent._fire_held()
  File "/usr/lib/python2.7/dist-packages/gpiozero/mixins.py", line 364, in _fire_held
    self.when_held()
  File "test.py", line 8, in raisePressException
    raise pressException( 'Button held' )
pressException: Button held

我怎样才能捕捉到这个异常?Button或者是否有另一种方法可以在初始化的同一范围内处理此类事件?

标签: pythonraspberry-pi

解决方案


尝试做这样的事情,

from signal import pause
from gpiozero import Button

class pressException( Exception ):
    pass

def raisePressException():
    raise pressException( 'Button held' )

try:
    push = Button( 5 )
    push.when_held = raisePressException()
    pause()
except pressException:
    print( 'Exception accepted' )

发生这种情况的原因是您在 try 和 except 之外引发错误,因此它无法捕获错误,而且您在循环中调用自己的 raise 函数,即使您尝试捕获自己的代码,它也会结束在递归循环中


推荐阅读