【发布时间】:2020-11-18 18:34:18
【问题描述】:
小问题,对我来说,学习最佳实践比什么都重要。如果有更好的方法,请批评:)
基本上,我有多个 GPIO 输入对应于一键按下。例如,如果用户按下按钮 2,我会从引脚 5 和引脚 6 获得高值。
所以在我的代码中,我需要将 High 引脚映射到“按钮”ID。
为此,我使用了一个二维列表,其中元素的索引将对应于按钮的“id”。
buttons = [
[],
[PIN_5],
[PIN_5, PIN_6],
[PIN_6],
[PIN_6, PIN_19],
...
]
我正在使用线程循环来检查引脚值,并将高状态引脚存储在一个新列表中。
所以一旦按下一个按钮,一个新的列表就会有哪些引脚是高的。
pins_high = [PIN_5, PIN_6]
所以这是我的最佳实践问题出现的地方,为了将这些引脚映射到映射列表中的按钮“id”,我使用 try except pass 方法
button_pressed = 0
try:
button_pressed = buttons.index(pins_high)
except ValueError:
pass
这是最佳做法吗?在我看来,这似乎是一个很好的解决方案,但我是否忽略了使用这样的 try/except/pass 的任何可能的泄漏/影响?
干杯, 杰米
【问题讨论】:
-
如果在里面,则捕获错误并打印或记录错误。为什么要通过声明。 github.com/aviboy2006/flask-rest-api/blob/master/app.py 将此作为参考。
-
你应该改用字典
-
谢谢。我想通过,因为如果 .index() 函数引发 ValueError 异常,我不需要发生任何事情。根据文档,如果找不到您“搜索”的值,则会引发此异常。所以我在这里用它来表示,“如果它们存在,给我我的引脚的索引,如果不存在,什么都不做”
-
@aviboy2006: 当你捕捉到一个有针对性的异常并且异常表明一个预期的状态而不是错误时,没有理由打印或记录它,比你需要的更多打印/登录附加到
if的else:。except: pass(或稍微不那么糟糕的except Exception: pass)是一个禁忌,如果try块很大并且可以通过许多不同的方式提高ValueError,那么except ValueError: pass将是一个问题,但是这个用例很好。 -
你应该使用 python 字典。 w3schools.com/python/python_dictionaries.asp 仅在确实需要且仅用于异常处理时才使用异常。
标签: python python-3.x