Как разорвать цикл while при чтении последовательного порта в python

Я пытаюсь прочитать последовательный порт в python в цикле while true, я использовал условие try-except для исключения KeyboardInterrupt. Но когда я нажимаю 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

person Muhammad Nabeel Tahir    schedule 20.04.2019    source источник


Ответы (1)


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
person niekas    schedule 20.04.2019