这个问题看似重复,但是this answer对我不起作用。 我正在制作一个循环,在该循环中,我从网络摄像头收集图像,并且工作正常。我的目标是处理脚本运行时可能发生的错误。最好的情况是,我可以在发生错误时捕获错误,将其记录在我的日志文件中并继续循环,以便在解决问题后自动恢复收集图像。
这是我的代码:
while ret and not is_stop:
try :
timestamp = int(time.time()*1000)
if (timestamp - last_pic) > images_interval :
last_pic = timestamp
resize = cv2.resize(frame, (height, width))
th_save = threading.Thread(target=save_image, args=(resize, folder+"/"+str(timestamp)+".jpg"))
th_save.start()
ret, frame = cap.read()
except cv2.error as e:
s = str(e)
write_log(s)
except Exception as e:
s = str(e)
write_log(s)
要测试错误,请拔下网络摄像头,然后收到此错误消息:
[WARN:1] videoio(MSMF):调用OnReadSample()并显示错误状态:-1072873851
[WARN:1] videoio(MSMF):异步ReadSample()调用失败,错误状态:-1072873851
[WARN:2] videoio(MSMF):无法抓取帧。错误:-1072873851
[WARN:2]终止异步回调
整个线程被中断。 因为没有任何内容写入日志文件,所以不会捕获任何异常。 我希望能够捕获异常/错误,以便不停止线程以便能够从except子句重新运行。
任何帮助将不胜感激。