python - 使用带有 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
或者是否有另一种方法可以在初始化的同一范围内处理此类事件?
解决方案
尝试做这样的事情,
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 函数,即使您尝试捕获自己的代码,它也会结束在递归循环中
推荐阅读
- python - 您可以在 TensorFlow/Keras 顺序网络中为多个输出设置目标吗
- kubernetes - K8S Fabric8 API + deploy、pod 和 service 一口气?
- list - 在列表中的每 n 个元素之后输出 y 元素
- angular - 在 Angular 中将 Markdown 预渲染为 HTML
- upgrade - 在 Rasperry Pi 4 中运行命令 sudo apt-get upgrade 失败
- android - 安卓:ApplicationContext 类
- php - 如何在 php 中向论坛帖子内容添加“提及”?
- sparql - 为什么这两个 sparql 查询不同?
- class - 引用在类中的触发器中使用的 Order sObject,以从单独的类中的该订单的 Order Products sObject 中提取行项目
- python - PyGame 碰撞响应错误