2017-09-26 7 views
0

Kinda new to python, issu d'une expérience de développement en C/C++. Ne pas déclamer, mais l'indentation et l'espacement des choses deviennent un peu le fléau de ma vie. Alors, voici le problème. Prenez cet extrait de code, tapé séquentiellement, n'effaçant jamais ou n'insérant aucune modification entre les codes existants.Comment modifier les codes indentés en python?

while condition: 
    line 1 
    line 2 

line3 #outside the loop 

Cela fonctionne très bien. Mais, supposons, je veux ajouter une autre instruction à l'intérieur de la boucle. (Modification en utilisant jupyter portable et sublime, sur Linux) Donc, je ajoute la ligne

while condition: 
    line 1 
    line 1.5 
    line 2 

line3 #outside the loop 

C'est quand le problème commence. Peu importe ce que j'essaie, je ne peux jamais le faire fonctionner. Il me donne des erreurs comme

line 2 ^ IndentationError: unexpected indent

ou certaines variations selon les circonstances. Il semble en quelque sorte que l'ajout d'une seule ligne au sein d'une structure de blocs imbriqués complexe et compliquée bouleverse totalement le tout.

Je n'insère pas les espaces/retraits manuellement, je laisse simplement mon éditeur s'en charger. Lorsque j'appuie sur Entrée, le curseur descend à la ligne suivante, indentée au même niveau que la ligne précédente (sauf si la ligne précédente se termine par :, auquel cas elle ajoute une autre indentation).

Quand je dois mettre fin à une en boucle ousi bloc, je viens de frapper l'arrière pour se rétracter un niveau de retrait. Les blocs semblent parfaitement bien par inspection visuelle, mais n'ont aucune idée comment l'interprète voit il.

Toute aide, sur ce que je fais de mal, ou au moins quelles sont les bonnes pratiques pour éviter ce problème? En particulier, l'ajout d'une seule ligne dans un bloc imbriqué existant semble presque impossible.

+0

est éditeur des espaces ou des tabulations Insertion? Cela fait une différence. En ce qui concerne les * bonnes pratiques *, vous pouvez trouver des recommandations et des suggestions sur [python.org] (http://www.python.org). –

+0

Pouvez-vous nous donner le code exact qui ne fonctionne pas? Vos exemples sont théoriquement corrects mais en pratique vous pourriez faire quelque chose de mal – HyperNeutrino

+0

Pouvez-vous ouvrir le script python dans un éditeur ordinaire pour voir les espaces/onglets? –

Répondre

1

L'éditeur de texte sublime utilise des onglets pour l'indentation par défaut. Si vous utilisiez initialement des espaces pour l'indentation et que vous les éditiez plus tard, vous auriez un mélange d'espaces et de tabulations pour l'indentation, qui est la cause de l'erreur d'indentation. C'est parce que Python 3 interdit de mélanger l'utilisation des tabulations et des espaces pour l'indentation. Le PEP8 Python Style Guide recommande d'utiliser 4 espaces par niveau d'indentation. Revenez en arrière et remplacez les onglets par des espaces, et le code fonctionnera très bien.

(PS: Il est assez facile de changer les paramètres d'indentation par défaut Sublime)

2

Vous pouvez mélanger d'utiliser l'espace et le retrait de l'onglet. Vous pouvez utiliser l'onglet ou l'espace mais pas les deux. Toutefois, il est recommandé d'utiliser l'espace comme PEP8 Guide de style Python

Si vous utilisez Visual Studio Code, vous pouvez installer l'extension pylint pour détecter facilement ces types d'erreurs. Quelque chose comme ceci:

pylint output