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

当前回答

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

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

其他回答

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

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

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

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

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

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

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

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

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

使用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.

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

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

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

希望这能有所帮助。