L'Indentation de if-ELSE bloc en python
Salut, je suis débutant en python et je suis en train de travailler sur la PNL à l'aide de python. Je vais avoir une erreur dans l'écriture de if-else bloc en python. Lorsque j'écris que si le bloc à l'époque, il fonctionne très bien:
if xyzzy.endswith('l'):
print xyzzy
après la saisie du côlon je suis en appuyant sur entrer, et il est automatiquement prise de moi à l'indentation.
mais lorsque j'essaie d'ajouter un bloc else après appuyant sur la touche "Entrée" après instruction print,
c'est le considérer comme instruction de bloc SI seulement on me donne incorrect indentation que je veux bloc else après, alors que quand je suis en train d'écrire le reste bloquer mon auto il me donne cette erreur.
else:
^
IndentationError: unexpected indent
alors, que dois-je faire après avoir écrit instruction print? entrez n'est clairement pas de travail parce que c'est en prenant le curseur vers l'avant, alors que quand j'utilise l'espace pour venir à le bon pointeur il me donne une erreur.
OriginalL'auteur Dude | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Il est difficile de voir à partir de votre post, quel est le problème, mais une
if-else
est formaté commeI. e., le
else
doit être à la même niveau correspondantif
.Voir ce Python doc/tutoriel sur
if
, et ce autre tutoriel trop.Parfois, quand votre éditeur n'indentation automatique pour vous et vous modifiez manuellement les choses pourraient se faire massacrer, de sorte que vous aurez à comprendre comment votre éditeur de poignées indentations (p. ex., est-il toujours à l'aide de
tabs
ou des espaces?, ce qui se passe si vous appuyez sur return etc).Aussi, méfiez-vous de mélanger les tabulations et des espaces, qui provoque des problèmes trop (difficile à repérer, puisque les deux sont "invisibles")
Avec mise à jour de votre post:
Voulez-vous dire lorsque vous appuyez sur entrée, il vous met au niveau de
print
? Quand mon éditeur est-ce (emacs) frapper la touche retour arrière me ramène 4 espaces automatiquement. Je ne suis pas sûr de savoir comment votre éditeur de poignées, mais votreelse
devrait être au même niveau que le correspondantif
.OriginalL'auteur Levon
Obtenir l'indentation correcte n'est pas vraiment un Python de la question, mais plutôt d'un problème avec l'éditeur que vous utilisez pour votre code source.
La plupart des éditeurs de comprendre Python correctement ajouter un niveau d'indentation après un deux-points (comme vous allez le voir). Parce que vous pouvez avoir autant de déclarations que vous le souhaitez dans ce bloc de code, l'éditeur n'a aucun moyen de savoir quand "hausser" la ligne suivante pour le
else
.Vous avez à dire à l'éditeur de hausser la ligne en appuyant sur la touche retour arrière ou maj-tab sur la ligne avant de commencer à taper.
Si vous insérez la
else
partie après le reste du code est écrit, faire absolument certain que les caractères que vous utilisez pour le retrait sont les mêmes que pour leif
déclaration. Si leif
déclaration est en retrait avec des espaces, utilisez le même nombre de places pourelse
. Si leif
déclaration est en retrait avec un ou plusieurs onglets, utilisez le même nombre d'onglets pour leselse
déclaration. Ne mélangez pas les espaces et tabulations pour l'indentation.Ne présumez pas que simplement parce que le "look" que s'ils sont en retrait même qu'ils sont en retrait le même. On peut utiliser des espaces et on peut utiliser les onglets (ou une combinaison).
OriginalL'auteur Larry Lustig
La
else
devrait être au même niveau d'indentation que leif
avec lequel il est couplé:Dans votre cas,
Même si votre éditeur est l'auto-indentation pour vous, vous devriez toujours non-tiret pour rendre le code syntaxiquement correct.
OriginalL'auteur arshajii
" -- lorsque j'utilise l'espace pour venir à le bon pointeur il me donne une erreur"
Bien sûr. L'utilisation de l'espace ne fait jamais un "saut de ligne", généralement il s'agit de \n dans les systèmes Unix. Si vous voulez ouvrir votre .py fichier dans un autre éditeur (dire le bloc-notes de windows), vous verriez que votre instruction else est dans la même ligne que l'impression.
" -- entrée est clairement pas de travail parce que c'est en prenant le curseur vers l'avant --"
Appuyez sur la touche retour arrière la bonne quantité de temps pour atteindre le même niveau d'indentation que SI votre déclaration.
OriginalL'auteur Esa Lindqvist
Je ne suis pas d'accord entièrement avec la accepté de répondre. Oui, le retrait est très important en Python, mais à l'état que la
if-else
a toujours l'air comme ça avec cette mise en forme est un peu par-dessus bord.Python permet un one-liners (même plusieurs) tant que vous ne faites pas quelque chose de compliqué là-dedans, qui exige le retrait de thebody de la
if
,elif
ouelse
.Voici quelques exemples:
Habituellement, il n'est pas recommandé pour emballer trop d'états sur une seule ligne, car alors vous perdez l'une des grandes caractéristiques de Python - la lisibilité du code.
Notez également que les exemples ci-dessus peuvent également être facilement appliquée à
for
etwhile
. Vous pouvez même aller plus loin que de faire certains fou de nidification de one-linerif
blocs si vous utilisez le opérateur conditionnel ternaire.Ici est de savoir comment l'opérateur considère habituellement:
Ce que ce n'est fondamentalement créer un simple
if-else
déclaration. Vous pouvez l'intégrer à l'un de vos one-liners si vous avez besoin de plus de ramification (mais pas complexe).Espère que cela clarifie la situation un peu et ce qui est permis et interdit. 😉
if/else
déclaration doit être formaté à l'aide de plusieurs lignes. La accepté de répondre est de montrer un exemple que leelse
doit être indenté au même niveau que leif
déclaration, et en tant que tel, résout l'erreur de l'OP est arriver:IndentationError: unexpected indent
🙂Ce mec a le cerveau... +1 pour la réponse, mais pour la créativité derrière elle...
OriginalL'auteur rbaleksandar
J'ai été faire cette erreur, même l'indentation examiné correct.
L'affichage dans Notepad++ il y a une option pour voir les espaces et les Tabulations. L'erreur a été causée par le mélange d'espaces et de tabulations pour créer de l'indentation.
Remplacer les Tabulations par des espaces dans chaque ligne a aidé à se débarrasser de l'erreur.
OriginalL'auteur guest
C'est un Python IDLE problème d'INTERFACE utilisateur: une Fois que vous appuyez sur entrée après si le bloc finitions, else suivant est déjà en cours d'intention avec l'instruction if. Pas besoin de fournir des tabulations ou des espaces pour faire de l'indentation. Ci-dessous est l'image de référence.
OriginalL'auteur Sameer Choudhary