我试图在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

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

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

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

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

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

不要使用标签。

将编辑器设置为使用4个空格作为缩进。 进行搜索和替换,将所有制表符替换为4个空格。 确保编辑器设置为将制表符显示为8个空格。

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


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

将制表符转换为空格 例如,如果你正在使用Stani的Python编辑器,你可以配置它在保存时执行。 将空格转换为制表符

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

Eclipse的Pydev提供了“将制表符转换为空格制表符”和“将空格制表符转换为制表符”函数。


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

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


如果你正在使用Sublime Text进行Python开发,你可以通过使用Anaconda包来避免这个错误。安装Anaconda后,在Sublime Text中打开你的文件,右键单击开放空间→选择Anaconda→单击自动格式化。完成了。或按“Ctrl + Alt + R”。


在IDLE编辑器中,你可以这样使用:

菜单编辑→全选 菜单格式→取消区域分类 假设编辑器用制表符替换了8个空格,在输入框中输入8。 点击选择,它会修复整个文档。


我使用notepad++得到了这个错误。

在notepad++中,你会看到制表符和四个空格都是相同的,但当你将代码复制到Python IDLE时,你会看到区别,带制表符的行比其他行前面有更多的空格。

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


我也犯了同样的错误。我必须向现有的*.py文件中添加几行代码。在notepad++中,它不起作用。

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


当同样的错误弹出时,我所做的是:选择所有内容(Str + A)并按Shift + Tab。所以不再有缩进了。现在回到你想要缩进的行,把它放回你想要的位置。

这对我很管用……


我得到了同样的错误,但不知道我做错了什么。

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

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

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


有时,制表符在缩进时确实会出错。一种方法显然是使用制表符和退格键来正确地缩进代码。

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

一个奇怪的方法,当我没有其他工作时,我得到的任何一行错误,我后退一行到前一行,然后按enter。它自动缩进行到正确的位置,我没有得到任何错误之后。

希望这能有所帮助。


崇高的文本3

在Sublime Text中,当编辑Python文件时:

崇高的文本菜单>首选项>设置-语法特定:

Python.sublime-settings

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

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

 autopep8 -i my_file.py

autopep8的文档链接在这里。


如果你的编辑器在进行搜索和替换时不识别制表符(如SciTE),你可以将代码粘贴到Word中,并使用ctrl - h和^t搜索,它可以找到制表符,然后可以用4个空格替换。


There was a duplicate of this question from here but I thought I would offer a view to do with modern editors and the vast array of features they offer. With python code, anything that needs to be intented in a .py file, needs to either all be intented using the tab key, or by spaces. Convention is to use four spaces for an indentation. Most editors have the ability to visually show on the editor whether the code is being indented with spaces or tabs, which helps greatly for debugging. For example, with atom, going to preferences and then editor you can see the following two options:

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

如果它使用制表符缩进,你会看到类似这样的东西:

Now if you noticed, you can see that when using tabs, there are more errors/warnings on the left, this is because of something called pep8 pep8 documentation, which is basically a uniform style guide for python, so that all developers mostly code to the same standard and appearance, which helps when trying to understand other peoples code, it is in pep8 which favors the use of spaces to indent rather than tabs. And we can see the editor showing that there is a warning relating to pep8 warning code W191,

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


使用notepad++可以用4个空格替换制表符来解决这个问题:

选择搜索->查找…或按“Ctrl + F” 选择Replace选项卡 在搜索模式框中选择扩展(\n, \r, \t, \0, \x…) 在字段中查找什么:写\t 在“Replace with”字段中按空格键4次。确保在这个领域没有其他的东西。 单击“全部替换”按钮


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

Open terminal (Ctrl + Alt + T). Go to the directory where the file is located (cd <path_to_your_directory>). Ex: cd /home/vineeshvs/work. Open the file in Vim (vim <file_name>). Ex: vim myfile.txt . [Optional step] Enable search keyword highlighting in Vim (ESC :set hlsearch) Go to the line where you have this problem (ESC :<line_number>). Ex: :53 in Vim editor after pressing ESC button once. Replace tabs using the required number of spaces in Vim (:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc). Ex: Tab will be replaced with four spaces using the following command: :.,$s/\t/ /gc after pressing ESC button once). This process is interactive. You may give y to replace the tab with spaces and n to skip a particular replacement. Press ESC when you are done with the required replacements.


当使用sublime文本编辑器时,我能够选择我的代码段,这段代码让我在缩进错误中使用制表符和空格不一致,并选择:

查看>缩进>将缩进转换为空格

这为我解决了问题。


我在一个.py文件中也遇到了类似的问题。我只是简单地在Pycharm中打开文件,然后按下Option+Command+L,这样就可以一次正确地格式化文件内容。

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


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

我在用jupyter笔记本,然后我把代码复制到sublime。显然,当你做特定的修改(比如移动函数中的代码)时,缩进就会变得混乱,这就是问题的来源。

所以只使用一个编辑器。如果你这样做了,那么你就没有问题了。


使用pylint,它会给你一个关于你需要多少空间和位置的详细报告。


如果你使用ATOM:

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


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


对于VSCode用户

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

Type

将缩进转换为空格

按回车。


下面的技巧对我很管用:

将代码复制并粘贴到记事本中。 然后从记事本再次选择所有和复制的代码 粘贴到我的views.py 在views.py中选择所有新粘贴的代码,并通过按shift+tab键从键盘上删除所有制表符 现在再次使用tab键来使用适当的缩进


崇高文本的灵魂解决

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

e.g

崇高的文本

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)

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


对于Anaconda, Spyder用户,您可以访问源代码>修复缩进


Jupyter用户:

CTRL + Shift + P自动标识选区:


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

对于那些试图使用别人代码的人来说;根据Python中的Tab Error,这是一个python2 vs. python3的问题(这个答案也参考了PEP8样式指南的相关部分)。