使用tryexcept语句信号暂停()功能

2024-09-30 20:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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的同一作用域中有没有其他方法来处理这样的事件?你知道吗


Tags: inpyselflibusrlineexceptionbutton
2条回答

从这条线升起

raise pressException( 'Button held' )

所以你必须用try ... except右边的一行, 你运行raisePressException的那一个,或者更高的级别

顺便说一句,这毫无意义:

def raisePressException():
    raise pressException( 'Button held' )
    push = Button( 5 )        # not able to be reached or achieved.
    push.when_held = raisePressException

只是使用

    raise pressException( 'Button held' )

试着这样做

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 and except之外引发错误,因此它无法捕获错误,而且您在循环中调用自己的raise函数,即使您尝试捕获自己的代码,它也会以递归循环结束

相关问题 更多 >