除python中的阻止外无法到达

时间:2019-08-22 01:16:38

标签: python-3.x

我想遍历特定的代码行,直到发生任何异常或键盘中断。但是,无论何时发生任何异常或由于键盘中断,我都无法到达异常块。 我该如何修改我的代码,以便在引发异常的情况下可以实际访问?

def run():
    lidar = RPLidar(PORT_NAME)

    iterator = lidar.iter_scans(50000)
    time.sleep(2)
    environment(iterator)

    while True:

        try:
            print('Hi')
            update_line(iterator)

        except Exception or KeyboardInterrupt:
            print("exception occur. Run again")
            #lidar = RPLidar(PORT_NAME)
            lidar.stop_motor()
            lidar.stop()
            lidar.disconnect()

            break





if __name__ == '__main__':
    run()

2 个答案:

答案 0 :(得分:1)

我很惊讶代码真正运行。当您说except Exception or KeyboardInterrupt时,您说的只是这里第一件事,其结果为True。由于bool(Exception)为True,因此您只会捕获Exception。要捕获多种类型的异常,您可以这样编写:

try:

except (Exception, KeyboardInterrupt):

它可能不是触发异常或非键盘异常,因为您要捕获的异常源自BaseException而非Exception。要修复将Exception更改为BaseException的问题。

答案 1 :(得分:0)

def run():

    while True:

        try:
            print('Hi')
            function_doesnt_exist(iterator)

        except Exception or KeyboardInterrupt:
            print("exception occur. Run again")
            break





if __name__ == '__main__':
    run()

当我有意调用while循环中不存在的函数时,它将调用exception:发生异常。再次运行 也许您没有正确生成错误,因此没有调用异常

此外,Exception或KeyboardInterrupt表示Exception,因为Exception包含KeyboardInterrupt,并且您以相同的方式处理它们 因此,如果您只是想捕捉键盘中断,请继续:

except KeyboardInterrupt:
    pass

或者,如果您想处理一般的异常,而键盘可以做一个不同的事情:

except KeyboardInterrupt:
    print("don't press ctrl+C")
    pass
except:
    print("exception occured")
    pass