未选择串行端口时如何处理异常

问题描述 投票:-1回答:1

我正在尝试将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

python exception pysimplegui
1个回答
0
投票

已解决的问题

我正在尝试此代码:

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中以尝试阻止。

© www.soinside.com 2019 - 2024. All rights reserved.