【问题标题】:Why got syntax error 'break' outside loop? [closed]为什么在循环外出现语法错误“break”? [关闭]
【发布时间】:2020-03-19 05:21:13
【问题描述】:

我有此代码,但我不知道为什么会收到错误 Break outside loop。你能帮帮我吗?

def TrackImage():
    recognizer = cv2.face_LBPHFaceRecognizer.create()
    recognizer.read('C:/Users/Jin/Anaconda3/envs/final/TrainingImageLabel/Trainner.yml')
    harcascadePath = ("C:/Users/Jin/Desktop/python opencv/opencv/build/etc/haarcascades/haarcascade_frontalface_default.xml")
    faceCascade = cv2.CascadeClassifier(harcascadePath)
    df=pd.read_csv('StudentDetails/studentDetails.csv')
    cam=cv2.FONT_HERSHEY_SIMPLEX
    col_names = ['Id','Name','Date','Time']
    attendance = pd.DataFrame(Columns = col_names)
    while True:
        ret, img = cam.read()
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        faces = detector.detectMultiScale(gray,1.3,5)
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
            Id, conf = recognizer.predict(gray[y:y+h, x:x+w])
            if (conf < 50):
                ts = time.time()
                date=datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
                timeStamp = datetime.datetime.fromtimestamp(ts).strftime('%H:%M,%S')
                aa = df.loc[df['Id'] == Id]['Name'].values
                tt=str(Id)+"-"+aa
                attendance.loc[len(attendance)] = [Id,aa,date,timeStamp]
            else:
                Id='Unknown'
                tt=str(Id)
                if(conf>75):
                    noOfFile=len (os.listdir("ImagesUnknown"))+1
                    cv2.imwrite("ImagesUnknown\Image"+str(noOfFile)+".jpg",im[y:y+h,x:x+w])
                cv2.putText(im,str(tt),(x,y+h), font, 1 ,(255,255,255),2)
    attendance= attendance.drop_duplicates(subset=['Id'],keep='first')
    cv2.imshow('im',im)
    if(cv2.waitKey(1)==ord('q')):
        break

【问题讨论】:

    标签: python


    【解决方案1】:

    因为break 仅用于强制退出循环。在您发布的代码中,您使用break 退出了if 条件,这是非法的。在您的情况下,您可以使用exit

    Break documentation

    【讨论】:

      【解决方案2】:

      检查代码的最后两行。 break 不在任何循环中。

      如果需要,放入特定循环,否则删除。

      【讨论】:

      • 我删除它另一个错误出来预期一个缩进块
      • 如果去掉,还需要处理上面的if语句。
      • 现在我得到另一个错误是 ret, img = cam.read() AttributeError: 'int' object has no attribute 'read'
      • 在执行任何操作之前,您应该检查代码在做什么。
      • 您删除 if 和 break 只是使语法正常。它不会使您正在做的事情正常。检查最后四行代码的缩进。检查 for 行代码应该是哪个循环 whilefor
      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 2016-07-07
      • 2017-11-03
      • 2012-12-09
      • 2013-01-18
      • 1970-01-01
      • 2017-07-08
      • 2017-02-12
      相关资源
      最近更新 更多