Ich habe Python-Code mit inkonsistenten Einrückungen. Es gibt eine Menge Mischung aus Tabulatoren und Leerzeichen, um die Sache noch schlimmer zu machen, und selbst Leerzeicheneinrückungen bleiben nicht erhalten.
Der Code funktioniert wie erwartet, ist jedoch schwer zu pflegen.
Wie kann ich den Einzug korrigieren (wie HTML Tidy , aber für Python), ohne den Code zu beschädigen?
autopep8
bietet im Grunde Einrückungen und vieles mehr: stackoverflow.com/questions/14328406/…Antworten:
Verwenden Sie das
reindent.py
Skript, das Sie imTools/scripts/
Verzeichnis Ihrer Python-Installation finden:In diesem Skript finden Sie detaillierte Anweisungen zur Verwendung.
quelle
python-examples
Paket aufgeteilt.python-examples
installiert ist, finden Sie reindent in/usr/share/doc/pythonX.X/examples/Tools/scripts/reindent.py
.Wenn Sie Vim verwenden , lesen Sie
:h retab
.Zum Beispiel, wenn Sie einfach eingeben
Alle Ihre Registerkarten werden zu Leerzeichen erweitert.
Du möchtest vielleicht
um sicherzustellen, dass in neuen Zeilen keine Literal-Tabulatoren verwendet werden.
Wenn Sie Vim nicht verwenden,
Ersetzt Tabulatoren durch Leerzeichen, vorausgesetzt, Tabulatoren werden alle 8 Zeichen angehalten
file.py
(wobei das Original für allefile.py.bak
Fälle verwendet wird). Ersetzen Sie die 8s durch 4s, wenn Ihre Tabulatoren stattdessen alle 4 Leerzeichen stehen.quelle
Ich würde nach autopep8 greifen , um dies zu tun:
Hinweis: E101 und E121 sind pep8-Einrückungen (ich denke, Sie können einfach übergeben
--select=E1
, um alle Einrückungsprobleme zu beheben - diejenigen, die mit E1 beginnen).Sie können dies mit dem rekursiven Flag auf Ihr gesamtes Projekt anwenden:
Siehe auch Tool zum Konvertieren von Python-Code in PEP8-kompatibel .
quelle
autopep8
schlägt fehl, wenn die Syntax falsch ist. Sie können dies mitpython -tt <file.py>
autopep8 -i script.py
Verwenden Sie autopep8
autopep8
Formatiert Python-Code automatisch so , dass er demPEP 8
nullstyle
Handbuch entspricht. Mithilfe despep8
Dienstprogramms wird bestimmt, welche Teile dernullcode
Formatierung formatiert werden müssen.autopep8
ist in der Lage, die meistennullformatting
Probleme zu beheben, die von gemeldet werden könnenpep8
.quelle
Mit Vim sollte es nicht mehr involviert sein als zu schlagen Escund dann zu tippen ...
... in der Datei, die Sie ändern möchten. Dadurch werden alle Tabulatoren in vier Leerzeichen konvertiert. Wenn Sie auch inkonsistente Abstände haben, wird dies schwieriger.
quelle
Es gibt auch PythonTidy (da Sie sagten, dass Sie HTML Tidy mögen).
Es kann jedoch viel mehr als nur Tabs bereinigen. Wenn Sie so etwas mögen, ist es einen Blick wert.
quelle
Auf den meisten UNIX-ähnlichen Systemen können Sie außerdem Folgendes ausführen:
Ändern Sie in der Befehlszeile die Nummer, wenn Sie Tabulatoren durch eine andere Anzahl von Leerzeichen als 4 ersetzen möchten. Sie können einfach ein Shell-Skript schreiben, um dies mit einer Reihe von Dateien gleichzeitig zu tun, wobei die ursprünglichen Dateinamen beibehalten werden.
quelle
Wenn Sie faul sind (wie ich), können Sie auch eine Testversion von Wingware Python IDE herunterladen, die über ein Auto-Fix-Tool für fehlerhafte Einrückungen verfügt. Es funktioniert ziemlich gut. http://www.wingware.com/
quelle
Das reindent-Skript hat bei mir aufgrund eines fehlenden Moduls nicht funktioniert. Wie auch immer, ich habe diesen
sed
Befehl gefunden, der den Job perfekt für mich macht:quelle
Versuchen Sie Emacs. Es bietet eine gute Unterstützung für Einrückungen, die in Python benötigt werden. Bitte überprüfen Sie diesen Link http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm
quelle
Versuchen Sie IDLE und verwenden Sie Alt+ X, um Einrückungen zu finden.
quelle
Ich habe eine einfache Lösung für dieses Problem. Sie können zuerst ": retab" und dann ": retab!" Eingeben, dann wäre alles in Ordnung
quelle
:retab
" in welchem Kontext ein. In Vim ?Wenn Sie versuchen, ein Tool zu finden, mit dem Sie Ihr
2-space indented
Python-Skript in einetab indented
Version umwandeln können , verwenden Sie einfach dieses Online-Tool:https://www.tutorialspoint.com/online_python_formatter.htm
quelle