在python中读取串行端口时如何中断while循环

时间:2019-04-20 14:27:32

标签: python pyserial try-except

我正在尝试在true循环中读取python中的串行端口,我在KeyboardInterrupt异常上使用了try-except条件。但是,当我按Ctrl + C时,除非我拔出连接到串行端口的设备(从中获取数据),否则什么都不会发生。

try:
    while True:
        x = ser.readline()
        dat=x.decode('utf8').split(",")
        dat[0]=dat[0].replace("\x00","")
        if(dat[0][0:2]=='ax' and dat[1][0:2]=='gx'):
            ax=dat[0][2:]
            gx=dat[1][2:]
            flagx=1
        if(dat[0][0:2]=='ay' and dat[1][0:2]=='gy' and flagx==1):
            ay=dat[0][2:]
            gy=dat[1][2:]
            flagx=2
        if(dat[0][0:2]=='az' and dat[1][0:2]=='gz' and flagx==2):
            az=dat[0][2:]
            gz=dat[1][2:]
            flagx=0
            dgx.append(gx)
            dgy.append(gy)
            dgz.append(gz)
            dax.append(ax)
            day.append(ay)
            daz.append(az)
         print(dat)
except KeyboardInterrupt:
    pass

1 个答案:

答案 0 :(得分:0)

Ctrl + C引发KeyboardInterrupt,但是您捕获了此异常并且什么也不做,因此什么也没有发生。如果要在异常块中添加一些逻辑,例如:

while True: 
    try: 
        pass 
    except KeyboardInterrupt: 
        print('Hello world!') 
        raise 

当您按Ctrl-C时将执行该命令。按下Ctrl-C后,此示例的输出为:

^CHello world!
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)

但是,我建议使用break语句来打破while循环。

while True:
    x = ser.readline()
    if x == termiation_line:
        break