【问题标题】:IndentationError: unindent does not match any outer indentation level (im using sublime) [duplicate]IndentationError:unindent 不匹配任何外部缩进级别(我使用 sublime)[重复]
【发布时间】:2020-05-19 21:07:09
【问题描述】:

当我运行这个 scipt 时,会出现一个错误:IndentationError: unindent does not match any external indentation level。我不知道它到底是什么意思,但我尝试过不同的代码编辑器,如 sublime 或 Visual Studio 代码,但也存在同样的问题。我以前从来没有遇到过这个问题。 代码:

import cv2
import numpy as np

video = cv2.VideoCapture(0)

while True:

    check, frame = video.read()

    if not check:
        print("Camera doesn´t work")
        break

    pressed = cv2.waitKey(1)
    if pressed == ord("q"):
        break


    blur = cv2.GaussianBlur(frame, (21, 21), 0)
    hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
    lower = [18, 50, 50]
    upper = [35, 255, 255]
    lower = np.array(lower, dtype="uint8")
    upper = np.array(upper, dtype="uint8")
    mask = cv2.inRange(hsv, lower, upper)

    output = cv2.bitwise_and(frame,hsv, mask=mask)
    cv2.imshow("Frame", output)

video.release()

cv2.DestroyAllWindows()

编辑:在掩码行有一个缺失的关闭,并且有一行缺失(import numpy as np),我在复制代码时犯了这个错误,但无论如何代码都会给我同样的错误。

【问题讨论】:

  • 您混合了制表符和空格。不要那样做。在编辑器中找到“将制表符转换为空格”按钮并点击它。

标签: python opencv


【解决方案1】:

Python 的工作方式与大多数其他语言不同。新的代码块依赖于缩进。这意味着,属于一起的代码块必须缩进完全相同 - 这也意味着相同数量的制表符或空格(在其他语言中,这通常通过括号或语句来实现)。

您应该选择一种方法。使用制表符或使用空格。我更喜欢这里的空格。

【讨论】:

  • 一个制表符有多少个空格?
  • 无,制表符就是制表符,空格就是空格。这些是不同的字符。但是,os 会进行解释,因此它取决于您的操作系统。
【解决方案2】:

第 24 行没有右括号

mask = cv2.inRange(hsv, lower, upper

【讨论】:

  • 这是他们会遇到的下一个语法错误,但当前的语法错误是混合制表符和空格问题。
【解决方案3】:

您包含的代码中的缩进没有问题。该行缺少左括号:

    mask = cv2.inRange(hsv, lower, upper

您也不要导入模块np。您需要在代码的开头添加:

 import numpy as np

解决这两个问题后,代码运行。

【讨论】:

  • "您包含的代码中的缩进没有问题。" - 有。你看不到它,因为它是一个混合制表符和空格的问题。
  • 我遇到了同样的错误
  • @user2357112supportsMonica - 虽然 OP 环境中的代码可能包含选项卡,但问题中包含的代码(当我看到它时)可以按原样复制到编辑器中,而无需任何选项卡。后来我尝试通过“编辑”访问代码(最初我不能),它有标签,但在消息的引用代码中,不存在标签。
【解决方案4】:

我让这段代码在 python 3 中工作

import cv2
import numpy as np

video = cv2.VideoCapture(0)

while True:

    check, frame = video.read()

    if not check:
        print("Camera doesn´t work")
        break

    pressed = cv2.waitKey(1)
    if pressed == ord("q"):
        break

    blur = cv2.GaussianBlur(frame, (21, 21), 0)
    hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
    lower = [18, 50, 50]
    upper = [35, 255, 255]
    lower = np.array(lower, dtype="uint8")
    upper = np.array(upper, dtype="uint8")
    mask = cv2.inRange(hsv, lower, upper) # close the command 

    output = cv2.bitwise_and(frame, hsv, mask=mask)
    cv2.imshow("Frame", output)

video.release()

cv2.destroyAllWindows() # destroy with lower case 'd'. 

完全没有缩进错误。当出现此类奇怪问题时,我强烈建议使用像 PyCharm 这样的适当调试器

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2021-09-30
    • 2013-09-04
    • 2012-07-04
    • 2020-08-14
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多