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

Jul*_*ert 175 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
Run Code Online (Sandbox Code Playgroud)

Len*_*bro 228

不要使用标签.

  1. 将编辑器设置为使用4个空格进行缩进.
  2. 进行搜索和替换以用4个空格替换所有选项卡.
  3. 确保您的编辑器设置为标签显示为8个空格.

注意:选项卡有8个空格的原因是,当您无意中插入选项卡时会立即注意到 - 例如从使用选项卡而不是空格的示例代码复制和粘贴时.

  • 这些教条背后有什么理由吗? (3认同)
  • @RocketR:答案是Python.如果仅使用制表符,则会获得8个空格的缩进,除非将制表符扩展到8个空格以外的其他位置,在这种情况下,它在其他编辑器上看起来很糟糕.如果混合制表符和空格,它可能会破坏(请参阅问题),如果您有8个空格的标签扩展,则可能会损坏.总结:使用标签进行缩进非常糟糕.**从不这样做**(除了需要它的语言/文件格式).结束. (3认同)
  • [链接到"选项卡与空格"相关的PEP 8部分](https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces)剧透:第一行是**"Spaces是首选的缩进方法."** (3认同)
  • 对于 vim: `set tabstop=8 softtabstop=0 Expandtab shiftwidth=4 smarttab` 然后 `%s/\t/ /g` (3认同)
  • @Lennart Regebro,我的意思是完全使用空格。我确实使用了它们,但在不知不觉中,标签对我来说似乎更好。顺便说一下,在 Ruby 编程中,每个人都使用 2 个空格,所以这不是一个适用于所有人的规则。 (2认同)
  • @RocketR Python 有 Pep8,该文档列出了“良好的 Python 风格”,明确指出 4 个空格是可接受的缩进形式。 (2认同)
  • 如果目标是*立即注意到*制表符,那么我是否可以建议使用*不是* 4 个空格的倍数的值?那么事情在视觉上就会无法对齐,而不仅仅是处于错误的缩进级别。 (2认同)

小智 73

对于 VSCode 用户

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

类型

>将缩进转换为空格

按 Enter。

  • 如果您更喜欢使用制表符,您可以通过重复上面的说明并键入以下内容来再次转换代码:&gt;将缩进转换为制表符 (11认同)

小智 37

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

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


Aka*_*all 31

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

 autopep8 -i my_file.py
Run Code Online (Sandbox Code Playgroud)

链接的文档在autopep8 这里.

  • 它不工作.. (3认同)

小智 27

使用 sublime 文本编辑器时,我能够选择inconsistent use of tabs and spaces in indentation出现错误的代码段并选择:

view > indentation > convert indentation to spaces

这为我解决了这个问题。


Cza*_*rek 13

可以notepad++通过将Tabs替换为 4 Spaces来解决此问题:

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

如何用空格替换制表符


Bru*_*uce 11

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

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

例如,在Emacs上,您可以调用方法"untabify".

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

   sed -e 's;\t;       ;' < yourFile.py > yourNedFile.py
Run Code Online (Sandbox Code Playgroud)

  • 如果你想在 Vim 中打开一个文件来执行此操作,你可以输入以下内容: `:%s/\t/ /g` 这会将每个制表符替换为 4 个空格。 (2认同)

Kap*_*man 10

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

  • Sublime Text 的替代方法 - 转到查看 -&gt; 缩进 -&gt; 隐藏缩进到空格 (3认同)

Vla*_*lad 7

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

顺便说一句,我一直使用4个空格标签,所以问题不是由它们造成的.


hcc*_*s19 6

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

它对我有用......


che*_*aby 6

崇高的文字 3

在崇高的文本,WHILE 编辑一个Python的文件:

Sublime Text 菜单> Preferences > Settings - Syntax Specific

Python.sublime-settings

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您使用原子

\n

转到菜单:\xe2\x86\x92 WhiteSpace \xe2\x86\x92将所有制表符转换为空格

\n