我正在使用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
的同一作用域中有没有其他方法来处理这样的事件?你知道吗
从这条线升起
所以你必须用
try ... except
右边的一行, 你运行raisePressException的那一个,或者更高的级别顺便说一句,这毫无意义:
只是使用
试着这样做
发生这种情况的原因是您在try and except之外引发错误,因此它无法捕获错误,而且您在循环中调用自己的raise函数,即使您尝试捕获自己的代码,它也会以递归循环结束
相关问题 更多 >
编程相关推荐