我正在尝试将pysimplegui与pyfirmata结合使用Python程序来控制Arduino。我为开发板所在的串行端口提供了一个文本输入字段,并且有一个空的文本元素,用于当通讯无效时。
while True:
event, values = window.read()
# untill it's closed manually:
if event in (None, 'Exit'):
break
# setup the serial port:
elif event == "Connect":
board = pf.Arduino(values["port"])
# change states of pins, according to checkboxes:
elif event == "Send":
for i in digital_ports:
j = 0
while j < 12:
board.digital[i].write(values[j])
j += 1
window.close() # when done, close.
这是我的代码的一部分。有12个复选框,我将其状态分配给Arduino端口的状态。我要添加创建异常处理的board
对象的部分。因此,如果端口丢失,或者该字段为空,我想通知用户。但是当我这样写的时候:
elif event == "Connect":
try:
board = pf.Arduino(values["port"])
except:
print("Error").
一切正常,直到我到达将数据发送到电路板的位置。它说未声明该板,这意味着发生了某种异常。如果我选择相同的端口,但没有尝试/例外-一切正常。整个代码是here
我正在尝试此代码:
elif event == "Connect":
try:
board = pf.Arduino(values["port"])
except:
window['error'].update("Serial port is invalid!!!")
else:
window['error'].Update(text_color='red')
window['error'].update('Connected')
window['connect'].Update(disabled=True)
这里的问题是,我尝试从输入字段中创建带有串行端口的板对象,但是该字段为空,然后运行except
中的代码。在这里它可以工作,但是如果分配了我的串行端口,它将运行try,它将找不到该端口并运行else
,因为不会引发任何异常。为了解决这个问题,我很自然地在else
声明之后将代码移至board
中以尝试阻止。