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

时间:2011-04-16 08:47:36

标签: python

我正在尝试在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

27 个答案:

答案 0 :(得分:200)

不要使用标签。

  1. 将编辑器设置为使用4 空格进行缩进。
  2. 进行搜索并替换以用4个空格替换所有标签。
  3. 确保您的编辑器设置为显示标签为8个空格。
  4. 注意:选项卡有8个空格的原因是,当您无意中插入选项卡时会立即注意到 - 例如从使用选项卡而不是空格的示例代码进行复制和粘贴时。

答案 1 :(得分:36)

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

  • 菜单编辑全选
  • 菜单格式 Untabify Region
  • 假设您的编辑器已使用选项卡替换了8个空格,请在输入框中输入8。
  • 点击选择,它会修复整个文档。

答案 2 :(得分:24)

对于VSCode用户

Ctrl + Shift + P或View-> Command Palette。

类型

>将缩进转换为空格

按Enter。

答案 3 :(得分:12)

使用下面的autopep8命令为我修复了该问题:

 autopep8 -i my_file.py

autopep8 linked here.

的文档

答案 4 :(得分:10)

如果您使用Sublime Text进行Python开发,则可以使用Anaconda包避免错误。安装Anaconda后,在Sublime Text中打开文件,右键单击空白区域→选择 Anaconda →单击autoformat。 完成的。或按 Ctrl + Alt + R

答案 5 :(得分:10)

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

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

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

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

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

答案 6 :(得分:7)

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

BTW,我一直使用4个空格的标签,所以问题不是由它们造成的。

答案 7 :(得分:6)

当弹出相同的错误时我做了什么:选择所有内容( Str + A )并按 Shift + Tab < / KBD>。所以没有任何东西缩进了。现在回到你想要缩进的行,然后把它放回原点。

它对我有用......

答案 8 :(得分:4)

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

  1. 选择搜索->查找... 或按 Ctrl + F
  2. 选择替换标签
  3. 在名为搜索模式的框中,选择 Extended(\ n,\ r,\ t,\ 0,\ x ...)
  4. 在字段中查找内容:写下 \ t
  5. 在字段替换为:中,按 Space 4次。确保此字段中没有其他内容。
  6. 点击按钮全部替换

How to replace Tabs with Spaces

答案 9 :(得分:3)

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

答案 10 :(得分:2)

我使用Notepad ++并收到此错误。

在Notepad ++中,您会看到制表符和四个空格都相同,但是当您将代码复制到Python IDLE时,您会看到差异,带有制表符的行在它之前会有更多空间比其他人。

为了解决这个问题,我刚刚在行之前删除了标签,然后添加了四个空格。

答案 11 :(得分:2)

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

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

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

这将自动修复所有内容。祝你好运:)

答案 12 :(得分:1)

我有同样的错误。我不得不在现有的* .py文件中添加几行代码。在Notepad ++中,它不起作用。

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

答案 13 :(得分:1)

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

  1. 将标签转换为空格

    例如,如果您使用的是Stani的Python编辑器,则可以将其配置为保存。

  2. 将空格转换为标签

  3. 如果您使用的是ActiveState Komodo,则可以使用工具“标记”您的代码。正如其他人已经指出的那样,这不是一个好主意。

    Eclipse的Pydev提供了“将标签转换为空格标签”和“将空格标签转换为标签”的功能。

答案 14 :(得分:1)

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

答案 15 :(得分:1)

如果您使用ATOM:

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

答案 16 :(得分:0)

以下技巧对我有用:

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

因此,请坚持一位编辑。如果这样做,那么您将没有问题。

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

对我来说,我正在处理崇高的文本,所以在缩进不合适的地方遇到了这样的错误,因此我选择了该代码行并遵循了崇高的文本

view->缩进->将缩进转换为空格

然后错误已解决

答案 21 :(得分:0)

使用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键替换为四个空格:{{1}一次按 ESC 按钮后)。此过程是交互式的。您可以给:.,$s/\t/ /gc用空格替换标签,而y跳过特定的替换。完成所需的替换后,按 ESC

答案 22 :(得分:0)

使用(对于python来说是Idle,对于python3来说是Idle3)。

答案 23 :(得分:0)

here中有一个重复的问题,但我想我会提出一种与现代编辑器及其提供的众多功能有关的观点。使用python代码时,所有需要在.py文件中使用的东西都需要全部使用Tab键或空格来实现。惯例是使用四个空格进行缩进。大多数编辑器都可以在编辑器上直观地显示代码是使用空格还是制表符缩进,这对于调试非常有帮助。例如,使用atom,转到首选项,然后进入编辑器,您可以看到以下两个选项:

atom editor to show tabs and spaces

然后,如果您的代码使用空格,则会在代码缩进的地方看到小点:

enter image description here

如果使用制表符缩进,则会看到以下内容:

enter image description here

现在,如果您注意到了,您可以看到,使用制表符时,左侧还有更多错误/警告,这是因为有一个名为pep8 pep8 documentation的东西,它基本上是python的统一样式指南,因此所有开发人员大多都使用相同的标准和外观进行编码,这在尝试理解其他人的代码时会有所帮助,因为pep8倾向于使用空格来缩进而不是使用制表符。而且我们可以看到编辑器显示存在与pep8警告代码W191

有关的警告

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

答案 24 :(得分:0)

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

答案 25 :(得分:0)

崇高文字3

在Sublime Text中, 编辑一个 Python 文件中:

高级文本菜单 > 首选项 > 设置-特定于语法

Python.sublime-settings

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

答案 26 :(得分:0)

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

另一种方法是使用space 4次(取决于您想要缩进的数量)。

一种奇怪的方式,当我没有其他任何工作时,无论哪一行我得到错误,我backspaced行前一行,然后按enter。它会自动缩进线条以纠正位置,之后我没有收到任何错误。

希望这应该有所帮助。

相关问题