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