Ich versuche, eine Anwendung in Python 3.2 zu erstellen, und verwende ständig Tabulatoren zum Einrücken, aber selbst der Editor ändert einige davon in Leerzeichen und druckt dann "inkonsistente Verwendung von Tabulatoren und Leerzeichen in Einrückungen" aus, wenn ich versuche, sie auszuführen das Programm.
Wie kann ich die Leerzeichen in Tabulatoren ändern? Es macht mich verrückt. (Ich bin ein Anfänger in der Programmierung). Ich würde mich freuen, wenn ich einige allgemeine Tipps zu meinem Code bekommen könnte, wenn ich viele Fehler gemacht hätte, würde ich mich freuen zu hören.
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
Antworten:
Verwenden Sie keine Registerkarten.
Hinweis: Der Grund für 8 Leerzeichen für Tabulatoren ist, dass Sie sofort bemerken, wenn Tabulatoren unbeabsichtigt eingefügt wurden - beispielsweise beim Kopieren und Einfügen aus Beispielcode, der Tabulatoren anstelle von Leerzeichen verwendet.
quelle
Mit dem folgenden
autopep8
Befehl wurde das Problem für mich behoben:Dokumentation für
autopep8
hier verlinkt.quelle
Mit dem IDLE- Editor können Sie Folgendes verwenden:
quelle
Wenn Sie Sublime Text für die Python-Entwicklung verwenden, können Sie den Fehler mithilfe des Pakets Anaconda vermeiden. Öffnen Sie nach der Installation von Anaconda Ihre Datei in Sublime Text, klicken Sie mit der rechten Maustaste auf die offenen Stellen → wählen Sie Anaconda → klicken Sie auf Autoformat. Fertig . Oder drücken Sie Ctrl+ Alt+ R.
quelle
Im Allgemeinen bevorzugen die Leute das Einrücken mit dem Raum. Es ist für alle Editoren konsistenter, was zu weniger Fehlanpassungen dieser Art führt. Sie dürfen jedoch mit Tab einrücken. Es ist deine Wahl; Beachten Sie jedoch, dass der Standard von 8 Leerzeichen pro Registerkarte etwas breit ist.
In Bezug auf Ihr Problem hat Ihr Redakteur höchstwahrscheinlich Probleme. Das Konvertieren von Registerkarten in Leerzeichen ist wirklich vom Editor abhängig.
Unter Emacs können Sie beispielsweise die Methode 'untabify' aufrufen.
In der Befehlszeile können Sie eine sed-Zeile verwenden (passen Sie die Anzahl der Leerzeichen an, was Ihnen gefällt):
quelle
Bei Verwendung des erhabenen Texteditors konnte ich das Segment meines Codes auswählen, das mir den
inconsistent use of tabs and spaces in indentation
Fehler gab, und Folgendes auswählen:view > indentation > convert indentation to spaces
das löste das Problem für mich.
quelle
Was ich getan habe, als der gleiche Fehler auftauchte: Wählen Sie alles ( Str+ A) und drücken Sie Shift+Tab . Es wurde also nichts mehr eingerückt. Kehren Sie nun zu den Zeilen zurück, die Sie eingerückt haben möchten, und setzen Sie sie wieder so ein, wie Sie es möchten.
Es hat bei mir funktioniert ...
quelle
Ich hatte kürzlich das gleiche Problem und fand heraus, dass ich nur den Zeichensatz der .py-Datei in UTF-8 konvertieren musste , da dies der Satz ist, den Python 3 verwendet.
Übrigens habe ich die ganze Zeit Tabulatoren mit 4 Leerzeichen verwendet, damit das Problem nicht durch sie verursacht wurde.
quelle
Erhabener Text 3
In Sublime Text, WÄHREND Sie eine Python- Datei bearbeiten :
Sublime Text-Menü > Einstellungen > Einstellungen - Syntaxspezifisch :
Python.sublime-Einstellungen
quelle
Es ist möglich, dieses Problem zu lösen,
notepad++
indem Sie Tabs durch 4 Spaces ersetzen :quelle
Ich hatte dieses Problem. Lösung: Ihre Registerkarte vor der Problemzeile besteht aus Leerzeichen, 4, 6 oder 8 Leerzeichen. Sie sollten sie löschen und TAB einfügen. '\ t'. Das ist alles.
quelle
Ich benutze Notepad ++ und habe diesen Fehler bekommen.
In Notepad ++ werden Sie sehen, dass sowohl die Registerkarte als auch die vier Leerzeichen identisch sind, aber wenn Sie Ihren Code in Python IDLE kopieren Sie den Unterschied, und die Zeile mit einer Registerkarte enthält mehr Leerzeichen als die anderen.
Um das Problem zu lösen, habe ich einfach die Registerkarte vor der Zeile gelöscht und dann vier Leerzeichen hinzugefügt.
quelle
Ich hatte den gleichen Fehler. Ich musste einer vorhandenen * .py-Datei mehrere Codezeilen hinzufügen. In Notepad ++ hat es nicht funktioniert.
Nach dem Hinzufügen der Codezeilen und dem Speichern wurde der gleiche Fehler angezeigt. Als ich dieselbe Datei in PyCharm öffnete und die Zeilen hinzufügte, verschwand der Fehler.
quelle
Ich habe die gleichen Fehler erhalten, konnte aber nicht herausfinden, was ich falsch gemacht habe.
Also habe ich es behoben, indem ich meinen Code automatisch eingerückt habe und dem Computer erlaubt habe, meinen Fehler zu beheben.
Wenn sich jemand fragt, wie ich das gemacht habe. Einfach. Geh in vim. Geben Sie G = gg ein.
Dadurch wird automatisch alles behoben. Viel Glück :)
quelle
Ihr Problem ist auf die Einschränkungen / Konfiguration Ihres Editors zurückzuführen. Einige Editoren stellen Ihnen Tools zur Verfügung, mit denen Sie das Problem lösen können, indem Sie:
Tabulatoren in Leerzeichen konvertieren
Wenn Sie beispielsweise den Python-Editor von Stani verwenden, können Sie ihn so konfigurieren, dass er beim Speichern ausgeführt wird.
Leerzeichen in Tabulatoren konvertieren
Wenn Sie ActiveState Komodo verwenden, verfügen Sie über ein Tool zum Tabellieren Ihres Codes. Wie andere bereits betont haben, ist dies keine gute Idee.
Pyclv von Eclipse bietet die Funktionen "Tabulatoren in Leerzeichen konvertieren" und "Leerzeichen in Registerkarten konvertieren".
quelle
Wenn Ihr Editor beim Suchen und Ersetzen keine Registerkarten erkennt (wie SciTE), können Sie den Code in Word einfügen und mit Strg-H und ^ t suchen, um die Registerkarten zu finden, die dann durch 4 Leerzeichen ersetzt werden können.
quelle
Von hier aus gab es ein Duplikat dieser Frage , aber ich dachte, ich würde einen Blick auf moderne Editoren und die Vielzahl der von ihnen angebotenen Funktionen werfen. Mit Python-Code muss alles, was in einer
.py
Datei beabsichtigt sein soll , entweder alle mit der Tabulatortaste oder durch Leerzeichen beabsichtigt sein. Konvention ist, vier Leerzeichen für eine Einrückung zu verwenden. Die meisten Editoren können im Editor visuell anzeigen, ob der Code mit Leerzeichen oder Tabulatoren eingerückt wird, was beim Debuggen sehr hilfreich ist. Wenn Sie beispielsweise mit atom zu Einstellungen und dann zum Editor gehen, sehen Sie die folgenden zwei Optionen:Wenn Ihr Code Leerzeichen verwendet, sehen Sie kleine Punkte, an denen Ihr Code eingerückt ist:
Und wenn es mit Tabulatoren eingerückt wird, sehen Sie ungefähr Folgendes:
Wenn Sie jetzt bemerkt haben, können Sie sehen, dass bei der Verwendung von Registerkarten links mehr Fehler / Warnungen angezeigt werden. Dies liegt an der sogenannten pep8 pep8-Dokumentation , die im Grunde eine einheitliche Stilrichtlinie für Python ist, sodass alle Entwickler meistens Code für verwenden Der gleiche Standard und das gleiche Erscheinungsbild, die beim Versuch helfen, den Code anderer zu verstehen, sind in pep8 enthalten, bei dem Leerzeichen anstelle von Tabulatoren zum Einrücken bevorzugt werden. Und wir können sehen, dass der Editor zeigt, dass es eine Warnung bezüglich des pep8-Warncodes gibt
W191
gibt.Ich hoffe, all das hilft Ihnen dabei, die Art des Problems zu verstehen, das Sie haben, und wie Sie es in Zukunft verhindern können.
quelle
Manchmal wird
tab
beim Einrücken etwas durcheinander gebracht. Eine Möglichkeit besteht darin, den Code offensichtlich zu verwendentab
undbackspace
den Code korrekt einzurücken.Eine andere Möglichkeit besteht darin,
space
viermal zu verwenden (je nachdem, wie viel Sie einrücken möchten).Eine seltsame Art und Weise, die für mich funktioniert hat, wenn nichts anderes funktioniert hat, egal in welcher Zeile ich den Fehler erhalte, ich habe
backspaced
diese Zeile in die vorherige Zeile verschoben und dann gedrücktenter
. Die Linie wurde automatisch in die richtige Position eingerückt, und danach wurde kein Fehler mehr angezeigt.Hoffentlich sollte dies helfen.
quelle
Ich hatte das gleiche Problem und behebte es mit dem folgenden Python-Skript. hoffe es hilft anderen.
Dies liegt an der Verwendung von Tabulatoren und Leerzeichen zum Einrücken von Code. In diesem Skript ersetze ich jede Registerkarte durch vier Leerzeichen.
Wenn Sie sublime oder einen anderen Editor verwenden, mit dem Sie Text ersetzen können, können Sie alle Registerkarten im Editor durch vier Leerzeichen ersetzen.
quelle
Verwenden Sie Idle für Python oder Idle3 für Python3.
quelle
Lösen Sie dies mit dem Vim-Editor
cd <path_to_your_directory>
). Bsp. :cd /home/vineeshvs/work
.vim <file_name>
). Bsp. :vim myfile.txt
.:set hlsearch
):<line_number>
). Beispiel::53
im Vim-Editor nach ESCeinmaligem Drücken der Taste.:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc
). Beispiel: Die Registerkarte wird mit dem folgenden Befehl durch vier Leerzeichen ersetzt::.,$s/\t/ /gc
nach ESC einmaligem Drücken der Taste). Dieser Prozess ist interaktiv. Sie können angebeny
, dass die Registerkarte durch Leerzeichen ersetzt undn
ein bestimmter Ersatz übersprungen werden soll. Drücken ESCSie, wenn Sie mit den erforderlichen Ersetzungen fertig sind.quelle
Ich bin seltsamerweise auf ein ähnliches Problem mit einer meiner .py-Dateien gestoßen. Ich habe die Datei einfach in Pycharm geöffnet und
Option
+Command
+ gedrückt,L
wodurch der Dateiinhalt auf einmal korrekt formatiert wird.Ich vermute, ich hatte Probleme, weil ich diese spezielle .py-Datei im Gegensatz zu meiner üblichen Auswahl an erhabenem Text oder Pycharm über Jupyter Labs codiert habe und daher auf einige versteckte Einrückungsprobleme gestoßen bin, auf die viele Antworten hier angespielt haben
quelle
Nun, ich hatte das gleiche Problem und mir wurde klar, dass das Problem darin besteht, dass ich Code von einem anderen Python-Editor nach sublime kopiert habe.
Ich habe mit Jupyter Notebook gearbeitet und dann den Code in sublime kopiert. Wenn Sie bestimmte Änderungen vornehmen (z. B. das Verschieben von Code in Funktionen), wird der Einzug anscheinend unübersichtlich, und hier liegt das Problem.
Halten Sie sich also einfach an einen Editor. Wenn Sie dies tun, haben Sie kein Problem.
quelle
Wenn
pylint
Sie es verwenden, erhalten Sie einen detaillierten Bericht darüber, wie viele Speicherplätze Sie benötigen und wo.quelle
Wenn Sie ATOM verwenden:
Gehen Sie zu Menü: Pakete -> WhiteSpace -> Alle Registerkarten in Leerzeichen konvertieren
quelle
Versuchen Sie, die Einrückungen zu löschen, und drücken Sie dann systematisch entweder viermal die Tabulatortaste oder die Leertaste. Dies passiert mir normalerweise, wenn ich einen Einzug mit der Tabulatortaste habe und dann die Leertaste in der nächsten Zeile verwende.
quelle
Markieren Sie die eingerückten Bits und klicken Sie dann auf die Registerkarten. Sie werden dann konsistent :)
quelle