J'essaie de créer une application en Python 3.2 et j'utilise tout le temps des onglets pour l'indentation, mais même l'éditeur en change certains en espaces, puis j'imprime "une utilisation incohérente des onglets et des espaces en indentation" lorsque j'essaie d'exécuter le programme.
Comment puis-je changer les espaces en tabulations? Ça me rend fou. (Je suis débutant en programmation). Je serais heureux si je pouvais obtenir des conseils généraux sur mon code, si j'ai fait beaucoup d'erreurs, je serais heureux d'entendre.
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
Réponses:
N'utilisez pas d'onglets.
Remarque: La raison de 8 espaces pour les tabulations est de sorte que vous remarquiez immédiatement lorsque des tabulations ont été insérées involontairement - comme lors de la copie et du collage à partir d'un exemple de code utilisant des tabulations au lieu d'espaces.
la source
L'utilisation de la
autopep8
commande ci-dessous l'a corrigé pour moi:Documentation pour
autopep8
lié ici.la source
Avec l' éditeur IDLE , vous pouvez utiliser ceci:
la source
Si vous utilisez Sublime Text pour le développement Python, vous pouvez éviter l'erreur en utilisant le package Anaconda. Après avoir installé Anaconda, ouvrez votre fichier dans Sublime Text, faites un clic droit sur les espaces ouverts → choisissez Anaconda → cliquez sur autoformat. C'est fait . Ou appuyez sur Ctrl+ Alt+ R.
la source
Généralement, les gens préfèrent le retrait de l'espace. Il est plus cohérent entre les éditeurs, ce qui entraîne moins de disparités de ce type. Cependant, vous êtes autorisé à mettre en retrait avec tabulation. C'est ton choix; cependant, vous devez savoir que la norme de 8 espaces par tabulation est un peu large.
Concernant votre problème, votre éditeur a probablement foiré. La conversion de tabulation en espace dépend vraiment de l'éditeur.
Sur Emacs, par exemple, vous pouvez appeler la méthode 'untabify'.
En ligne de commande, vous pouvez utiliser une ligne sed (adaptez le nombre d'espaces à votre guise):
la source
Lors de l'utilisation de l'éditeur de texte sublime, j'ai pu sélectionner le segment de mon code qui me donnait l'
inconsistent use of tabs and spaces in indentation
erreur et sélectionner:view > indentation > convert indentation to spaces
ce qui a résolu le problème pour moi.
la source
Ce que j'ai fait lorsque la même erreur est apparue: sélectionnez tout ( Str+ A) et appuyez sur Shift+ Tab. Donc, rien n'était plus en retrait. Revenez maintenant aux lignes que vous souhaitez mettre en retrait et remettez-les comme vous le souhaitez.
Ça a marché pour moi ...
la source
J'ai récemment eu le même problème et j'ai découvert que j'avais juste besoin de convertir le jeu de caractères du fichier .py en UTF-8 car c'est l'ensemble utilisé par Python 3.
BTW, j'ai utilisé des onglets à 4 espaces tout le temps, donc le problème n'a pas été causé par eux.
la source
Sublime Text 3
Dans Sublime Text, PENDANT l' édition d' un fichier Python :
Menu Texte sublime > Préférences > Paramètres - Spécifique à la syntaxe :
Paramètres Python.sublime
la source
Il est possible de résoudre ce problème
notepad++
en remplaçant Tabs par 4 Spaces:la source
J'ai eu ce problème. Solution: votre «tabulation» avant la ligne de problème est constituée d'espaces, 4, 6 ou 8 espaces. Vous devez les effacer et insérer TAB. '\ t'. C'est tout.
la source
J'utilise Notepad ++ et j'ai obtenu cette erreur.
Dans Notepad ++, vous verrez que l'onglet et les quatre espaces sont identiques, mais lorsque vous copiez votre code dans Python IDLE, vous verrez la différence et la ligne avec un onglet aura plus d'espace devant elle que les autres.
Pour résoudre le problème, j'ai simplement supprimé l'onglet avant la ligne, puis ajouté quatre espaces.
la source
J'ai eu la même erreur. J'ai dû ajouter plusieurs lignes de code à un fichier * .py existant. Dans Notepad ++, cela n'a pas fonctionné.
Après avoir ajouté les lignes de code et enregistré, j'ai eu la même erreur. Lorsque j'ai ouvert le même fichier dans PyCharm et ajouté les lignes, l'erreur a disparu.
la source
J'ai eu les mêmes erreurs mais je n'ai pas pu comprendre ce que je faisais mal.
Je l'ai donc corrigé en exécutant l'indentation automatique sur mon code et en permettant à la machine de corriger ma faute.
Si quelqu'un se demande comment j'ai fait ça. Facile. Allez en vim. Tapez G = gg.
Cela corrigera automatiquement tout. Bonne chance :)
la source
Votre problème est dû aux limitations / configuration de votre éditeur. Certains éditeurs vous fournissent des outils pour résoudre le problème en:
Conversion d'onglets en espaces
Par exemple, si vous utilisez l'éditeur Python de Stani, vous pouvez le configurer pour le faire lors de l'enregistrement.
Conversion d'espaces en tabulations
Si vous utilisez ActiveState Komodo, vous disposez d'un outil pour «tabifier» votre code. Comme d'autres l'ont déjà souligné, ce n'est pas une bonne idée.
Pydev d'Eclipse fournit les fonctions "Convertir les tabulations en tabulations d'espace" et "Convertir les tabulations d'espace en tabulations".
la source
Si votre éditeur ne reconnaît pas les onglets lors d'une recherche et d'un remplacement (comme SciTE), vous pouvez coller le code dans Word et effectuer une recherche à l'aide de Ctr-H et ^ t qui trouve les onglets qui peuvent ensuite être remplacés par 4 espaces.
la source
Il y avait un double de cette question à partir d' ici, mais j'ai pensé offrir une vue à faire avec les éditeurs modernes et la vaste gamme de fonctionnalités qu'ils offrent. Avec le code python, tout ce qui doit être prévu dans un
.py
fichier, doit être soit intentionnel à l'aide de la touche de tabulation, soit par des espaces. La convention consiste à utiliser quatre espaces pour une indentation. La plupart des éditeurs ont la possibilité de montrer visuellement sur l'éditeur si le code est en retrait avec des espaces ou des tabulations, ce qui facilite grandement le débogage. Par exemple, avec atom, en allant dans les préférences puis dans l'éditeur, vous pouvez voir les deux options suivantes:Ensuite, si votre code utilise des espaces, vous verrez de petits points où votre code est en retrait:
Et s'il est mis en retrait à l'aide d'onglets, vous verrez quelque chose comme ceci:
Maintenant, si vous l'avez remarqué, vous pouvez voir que lorsque vous utilisez des onglets, il y a plus d'erreurs / avertissements sur la gauche, c'est à cause de quelque chose appelé pep8 pep8 documentation , qui est fondamentalement un guide de style uniforme pour python, de sorte que tous les développeurs codent principalement pour le même standard et l'apparence, ce qui aide à comprendre le code des autres, c'est dans pep8 qui favorise l'utilisation d'espaces pour mettre en retrait plutôt que des tabulations. Et nous pouvons voir l'éditeur montrant qu'il y a un avertissement relatif au code d'avertissement pep8
W191
,J'espère que tout ce qui précède vous aide à comprendre la nature du problème que vous rencontrez et comment le prévenir à l'avenir.
la source
Parfois,
tab
ça gâche pendant le retrait. Une façon consiste évidemment à utiliser letab
etbackspace
à indenter correctement le code.Une autre façon consiste à utiliser
space
4 fois (selon la quantité que vous souhaitez mettre en retrait).Une façon étrange qui a fonctionné pour moi quand rien d'autre n'a fonctionné, quelle que soit la ligne où j'obtiens l'erreur, je
backspaced
cette ligne à la ligne précédente, puis j'ai appuyéenter
. Il a automatiquement mis la ligne en retrait pour corriger la position et je n'ai plus eu d'erreur par la suite.J'espère que cela devrait aider.
la source
J'ai eu le même problème et le résoudre en utilisant le script python suivant. j'espère que cela aide les autres.
c'est à cause de l'utilisation des tabulations et des espaces pour indenter le code. dans ce script, je remplace chaque onglet par quatre espaces.
si vous utilisez sublime ou tout autre éditeur qui vous donne l'outil pour remplacer le texte, vous pouvez remplacer tous les onglets par quatre espaces depuis l'éditeur.
la source
Utilisez Idle pour python ou Idle3 pour python3.
la source
Résoudre cela en utilisant l'éditeur Vim
cd <path_to_your_directory>
). Ex:cd /home/vineeshvs/work
.vim <file_name>
). Ex:vim myfile.txt
.:set hlsearch
):<line_number>
). Ex::53
dans l'éditeur Vim après avoir appuyé ESCune fois sur le bouton.:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc
). Ex: Tab sera remplacé par quatre espaces en utilisant la commande suivante::.,$s/\t/ /gc
après avoir appuyé ESC une fois sur le bouton). Ce processus est interactif. Vous pouvez donnery
pour remplacer l'onglet par des espaces etn
pour sauter un remplacement particulier. Appuyez sur ESClorsque vous avez terminé avec les remplacements requis.la source
J'ai étrangement rencontré un problème similaire avec l'un de mes fichiers .py. J'ai simplement ouvert le fichier dans Pycharm et appuyé sur
Option
+Command
+L
qui formate correctement le contenu du fichier en une seule fois.Je soupçonne que j'avais des problèmes parce que j'ai codé ce fichier .py particulier via les laboratoires jupyter par opposition à mon choix habituel de texte sublime ou Pycharm et j'ai donc rencontré des problèmes d'indentation cachés auxquels de nombreuses réponses ont fait allusion ici.
la source
Eh bien, j'ai eu le même problème et j'ai réalisé que le problème est que j'ai copié du code à partir d'un autre éditeur python pour le sublimer.
Je travaillais avec le cahier jupyter puis j'ai copié le code en sublime. Apparemment, lorsque vous apportez des modifications spécifiques (comme le déplacement de code dans des fonctions), l'indentation devient compliquée et c'est de là que vient le problème.
Il suffit donc de s'en tenir à un seul éditeur. Si vous le faites, vous n'aurez aucun problème.
la source
L'utiliser
pylint
vous donnera un rapport détaillé sur le nombre d'espaces dont vous avez besoin et où.la source
Si vous utilisez ATOM:
Allez dans le menu: Packages -> WhiteSpace -> Convertir tous les onglets en espaces
la source
Essayez de supprimer les retraits puis appuyez systématiquement sur tabulation ou sur espace 4 fois. Cela m'arrive généralement lorsque j'ai un retrait à l'aide de la touche de tabulation et que j'utilise ensuite la touche espace dans la ligne suivante.
la source
Sélectionnez les bits en retrait, puis cliquez sur les onglets. Ils deviendront alors cohérents :)
la source