繁体   English   中英

“缩进中制表符和空格的使用不一致”

[英]"inconsistent use of tabs and spaces in indentation"

我正在尝试在 Python 3.2 中创建一个应用程序,我一直使用制表符进行缩进,但即使是编辑器也将其中一些更改为空格,然后在我尝试运行时打印出“缩进中制表符和空格的使用不一致”该程序。

如何将空格更改为制表符? 这让我疯狂。

import random

attraktioner = ["frittfall","bergodalbana","spökhuset"]


class Nojesfalt:
    def __init__(self, attraktion):
        self.val = attraktion
        self.langd = 0
        self.alder = 0


#längdgräns för fritt fall
    def langdgrans(self):
        print("")
        self.langd = int(input("Hur lång är du i cm? "))
        if self.langd < 140:
            print("tyvärr, du är för kort, prova något annat")
            return 0
        elif self.langd >= 140:
            print("håll dig hatten, nu åker vi!")
            print(" ")
            return 1

#åldersgräns för spökhuset
    def aldersgrans(self):
        print("")
        self.alder = int(input("Hur gammal är du? "))
        if self.alder < 10:
            print("tyvärr, du är för ung, prova något annat")
            return 0
        elif self.alder >= 10:
            print("Gå in om du törs!")
            print(" ")
            return 1


#åker attraktion frittfall lr bergodalbana
        def aka(self):
                print("")
        print(self.val)
        tal = random.randint(0,100)
        if tal < 20:
            print("åkturen gick åt skogen, bättre lycka nästa gång")
        elif tal >= 20:
            print("jabbadabbbadoooooooo")
            return 1

#går i spökhuset
        def aka1(self):
                print("")
        print(self.val)
        tal = random.randint(0,100)
        if tal < 20:
            print("du är omringad av spöken och kan inte fortsätta")            return 0
        elif tal >= 20:
            print("Buhuuuuuu, buuuhuuuu")
            return 1

#programkod
print("Välkommen till nöjesfältet, vad vill du göra?")
print(" ")

while 1:
    vald_attr = input("Vad vill du göra?\n1. frittfall\n2. bergodalbana\n3. spökhuset\n4. Avsluta\n")
    if vald_attr == "1":
        val = Nojesfalt(attraktioner[0])
        if val.langdgrans() == 1:
            val.aka()
    elif vald_attr == "2":
        val = Nojesfalt(attraktioner[1])
        val.aka()
    elif vald_attr == "3":
        val = Nojesfalt(attraktioner[2])
        if val.aldersgrans() == 1:
            val.aka1()
    elif vald_attr == "4":
        break

不要使用标签。

  1. 将您的编辑器设置为使用 4 个空格进行缩进。
  2. 进行搜索并替换以将所有制表符替换为 4 个空格。
  3. 确保您的编辑器设置为将制表符显示为 8 个空格。

注意:制表符使用 8 个空格的原因是为了让您在无意中插入制表符时立即注意到 - 例如从使用制表符而不是空格的示例代码中复制和粘贴时。

使用下面的autopep8命令为我修复了它:

 autopep8 -i my_file.py

autopep8的文档链接在这里。

对于 VSCode 用户

Ctrl+Shift+P 或查看-> 命令面板。

类型

>将缩进转换为空格

按 Enter。

使用IDLE编辑器,您可以使用:

  • 菜单编辑全选
  • 菜单格式取消选项卡区域
  • 假设您的编辑器已将 8 个空格替换为制表符,请在输入框中输入 8。
  • 点击选择,它会修复整个文档。

使用 sublime 文本编辑器时,我能够选择我的代码段,它让我inconsistent use of tabs and spaces in indentation然后选择:

view > indentation > convert indentation to spaces

这为我解决了这个问题。

可以使用notepad++通过将Tab替换为 4 个Space来解决此问题:

  1. 选择搜索 -> 查找...或按Ctrl + F
  2. 选择替换选项卡
  3. 在名为Search Mode的框中选择Extended(\n, \r, \t, \0, \x...)
  4. 在字段中查找内容:\t
  5. 替换为字段中:空格键 4 次。 确保该领域没有其他内容。
  6. 点击按钮全部替换

如何用空格替换制表符

如果您使用Sublime Text进行 Python 开发,您可以通过使用 Anaconda 包来避免该错误。 安装 Anaconda 后,在 Sublime Text 中打开文件,右键单击空白处 → 选择Anaconda → 单击自动格式化。 完成 或按Ctrl + Alt + R

通常,人们更喜欢用空格缩进。 它在编辑器之间更加一致,从而减少了此类不匹配。 但是,您可以使用制表符缩进。 这是你的选择; 但是,您应该知道每个制表符 8 个空格的标准有点宽。

关于你的问题,很可能是你的编辑搞砸了。 将制表符转换为空格实际上取决于编辑器。

例如,在 Emacs 上,您可以调用方法“untabify”。

在命令行上,您可以使用 sed 行(根据您的喜好调整空格数):

   sed -e 's;\t;       ;' < yourFile.py > yourNedFile.py

崇高的文字 3

Sublime Text 中,编辑Python文件时:

Sublime Text 菜单>首选项>设置 - 特定语法

Python.sublime-settings

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}

弹出相同错误时我做了什么:选择所有内容( Str + A )并按Shift + Tab 所以什么都没有缩进了。 现在回到你想要缩进的行,然后按你想要的方式放回去。

它对我有用...

我最近遇到了同样的问题,发现我只需要将 .py 文件的字符集转换为UTF-8 ,因为这是 Python 3 使用的集合。

顺便说一句,我一直使用 4 空格制表符,所以问题不是由它们引起的。

如果您使用 ATOM:

转到菜单:包 --> WhiteSpace --> 将所有制表符转换为空格

我有这个问题。 解决方案:问题行之前的“制表符”是空格,4、6或8个空格。 您应该擦除它们并插入TAB。 '\\ t'。 就这样。

尝试删除缩进,然后系统地按 Tab 或按空格 4 次。 当我使用制表键缩进然后在下一行使用空格键时,通常会发生这种情况。

我使用记事本++并得到了这个错误。

在 Notepad++ 中,您会看到制表符和四个空格是相同的,但是当您将代码复制到 Python IDLE时,您会看到不同之处,带制表符的行前面的空间比其他行要多。

为了解决这个问题,我只是删除了行前的制表符,然后添加了四个空格。

这里有一个这个问题的副本,但我想我会提供一个与现代编辑器和他们提供的大量功能有关的观点。 使用 python 代码,任何需要在.py文件中表示的内容,都需要使用 tab 键或空格表示。 约定是使用四个空格作为缩进。 大多数编辑器都能够在编辑器上直观地显示代码是否使用空格或制表符缩进,这对调试有很大帮助。 例如,使用 atom,转到首选项然后编辑器,您可以看到以下两个选项:

原子编辑器显示制表符和空格

然后,如果您的代码使用空格,您将看到代码缩进的小点:

在此处输入图像描述

如果它使用制表符缩进,您将看到如下内容:

在此处输入图像描述

现在如果你注意到了,你可以看到在使用选项卡时,左边有更多的错误/警告,这是因为一个叫做 pep8 pep8 文档的东西,它基本上是一个统一的 python 样式指南,所以所有的开发人员大多编码到相同的标准和外观有助于理解其他人的代码,但在 pep8 中,它倾向于使用空格而不是制表符来缩进。 我们可以看到编辑器显示有一个与 pep8 警告代码W191相关的警告,

我希望以上所有内容都可以帮助您了解您遇到的问题的性质以及将来如何预防它。

您的问题是由于您的编辑器限制/配置造成的。 一些编辑器通过以下方式为您提供帮助解决问题的工具:

  1. 将制表符转换为空格

    例如,如果您使用的是 Stani 的 Python 编辑器,您可以将其配置为在保存时执行此操作。

  2. 将空格转换为制表符

如果你使用 ActiveState Komodo,你有一个工具来“tabify”你的代码。 正如其他人已经指出的那样,这不是一个好主意。

Eclipse 的 Pydev 提供了“Convert tabs to space-tabs”和“Convert space-tabs to tabs”的功能。

崇高文本的解决方案

我对这个问题的解决方案是在空闲编辑器中打开它,然后空闲编辑器会发现你的问题

例如

崇高的文字

while run:

    clock.tick(27)
    
    milli = clock.tick()
    seconds = milli/1000
    timeForLevel += seconds
    print(timeForLevel)
    

空闲编辑器

while run:

    clock.tick(27)
    
       milli = clock.tick()
    seconds = milli/1000
    timeForLevel += seconds
    print(timeForLevel)

我并不是说你应该只使用空闲的编辑器。 我是说如果你得到那个错误你应该检查空闲编辑器

我有同样的错误。 我必须在现有的 *.py 文件中添加几行代码。 在记事本++中它不起作用。

添加代码行并保存后,我得到了同样的错误。 当我在PyCharm中打开同一个文件并添加行时,错误消失了。

我的一个 .py 文件奇怪地遇到了类似的问题。 我只是在 Pycharm 中打开了文件,然后按下Option + Command + L即可一次性正确格式化文件内容。

我怀疑我遇到了麻烦,因为我通过 jupyter 实验室编写了这个特定的 .py 文件,而不是我通常选择的 sublime text 或 Pycharm,因此遇到了一些隐藏的缩进问题,这里的许多答案都提到了

使用pylint它将为您提供有关您需要多少空间以及在哪里的详细报告。

以下技巧对我有用:

  1. 将代码复制并粘贴到记事本中。
  2. 然后从记事本再次全选并复制代码
  3. 粘贴到我的views.py
  4. 在views.py中选择所有新粘贴的代码,并通过按键盘上的shift+tab来删除所有选项卡
  5. 现在再次使用 tab 键来使用正确的缩进

对于 Anaconda、Spyder 用户,您可以转到 Source> Fix indentation

我有同样的问题,并使用以下 python 脚本修复它。 希望它可以帮助别人。

这是因为使用制表符和空格来缩进代码。 在此脚本中,我将每个选项卡替换为四个空格。

input_file = "source code path here"  # e.g. source.py
output_file = "out put file path here"  # e.g out.py
with open(input_file, 'r') as source:
    with open(output_file, 'a+') as result:
        for line in source:
            line = line.replace('\t', '    ')
            result.write(line)

如果您的编辑器在执行搜索和替换(如 SciTE)时无法识别选项卡,您可以将代码粘贴到 Word 中并使用 Ctr-H 和 ^t 进行搜索,找到可以替换为 4 个空格的选项卡。

对于python使用Idle,对于python3使用Idle3。

使用 Vim 编辑器解决这个问题

  1. 打开终端( Ctrl + Alt + T )。
  2. 转到文件所在的目录( cd <path_to_your_directory> )。 例如: cd /home/vineeshvs/work
  3. 在 Vim ( vim <file_name> ) 中打开文件。 例如: vim myfile.txt
  4. [可选步骤] 在 Vim 中启用搜索关键字突出显示 ( ESC :set hlsearch )
  5. 转到您遇到此问题的行( ESC :<line_number> )。 例如:按一次ESC按钮后在 Vim 编辑器中的:53
  6. 使用 Vim 中所需数量的空格替换制表符 ( :.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc )。 例如:使用以下命令将 Tab 替换为四个空格:.,$s/\t/ /gc按一次ESC按钮后)。 这个过程是交互式的。 您可以给y以用空格替换制表符,并给n以跳过特定的替换。 完成所需的替换后按ESC

好吧,我遇到了同样的问题,我意识到问题在于我将代码从另一个 python 编辑器复制到了 sublime。

我正在使用 jupyter notebook,然后将代码复制到 sublime 中。 显然,当您进行特定修改(例如在函数中移动代码)时,缩进会变得混乱,这就是问题所在。

所以只要坚持一个编辑器。 如果你这样做,那么你将没有问题。

对于 Jupyter 用户:

CTRL + Shift + P 自动识别选择: 在此处输入图像描述

虽然最初的问题是关于自行编写的代码,但搜索引擎在搜索标题字符串时会在此处引导。 尝试使用已经存在的库或工具时,很可能会收到一条错误消息。

能够声称拥有已知宇宙中所有废弃代码的所有权以对其进行清理可能很好,但并不现实。 因此,对于那些想知道导致此错误的原因的人; 根据Python 中的 Tab Error ,这似乎是 python2 与 python3 的事情。

对我来说,创建一个以python2 "$@"作为唯一内容的 shell 脚本,并确保在$PATH中的 /usr/bin/python 之前找到它就可以了。 (实际上,我确实尝试过先用空格替换制表符,但恶作剧的工具检测到我的更改并反转了它们。)

我得到了同样的错误,但无法弄清楚我做错了什么。

所以我通过在我的代码上运行自动缩进并允许机器修复我的错误来修复它。

如果有人想知道我是怎么做到的。 简单的。 进入vim。 输入 G=gg。

这将自动修复所有问题。 祝你好运 :)

有时, tab在缩进时确实会搞砸。 一种方法是显然使用tabbackspace来正确缩进代码。

另一种方法是使用space 4 次(取决于你想缩进多少)。

一种奇怪的方式在没有其他方法时对我有用,无论我收到错误的哪一行,我都将该行backspaced到上一行,然后按enter 它自动将行缩进以纠正位置,之后我没有收到任何错误。

希望这会有所帮助。

突出显示缩进的位,然后单击制表符。 然后它们将变得一致:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM