2013-01-30 3 views
3

J'utilise actuellement Komodo Edit sous Windows 7, cependant, j'ai rencontré ce problème sur mon Mac avec TextWrangler. Pour une raison quelconque, je reçois une sorte d'erreur d'espace qui est un énorme problème quand j'écris en Python. Par exemple, tout semble bien onglets, mais Komodo actuellement me donne un « Ambigu espaces blancs » erreurProblèmes d'espace avec python

//How it appears in my editor 
def SaveList(self, directory): 
    templist = [] 
    templistbox2 = [] 
    for n,i in enumerate(self.listbox2.get(0,END)): 
     templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i))) 
    for filename in sorted(os.listdir(directory)): 
     self.templist.insert(i, filename) 
     print filename #whitespace error here 

vu que je l'ai vécu avec deux éditeurs différents sur Windows et Mac, je me demande si il y a un réglage que je ne connais pas, ou si je fais quelque chose de mal.

+0

Pourriez-vous avoir des onglets dans l'indentation? Peut-être que le réglage que vous voulez est sur la conversion des onglets à l'espace. –

Répondre

6

Lorsque je copie votre code dans un fichier, test.py et exécuter

cat -A test.py 

Je vois

//How it appears in my editor$ 
def SaveList(self, directory):$ 
    templist = []$ 
    templistbox2 = []$ 
    for n,i in enumerate(self.listbox2.get(0,END)): $ 
     templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))$ 
    for filename in sorted(os.listdir(directory)):$ 
     self.templist.insert(i, filename)$ 
^I print filename #whitespace error here$ 

qui indique qu'il ya un onglet (représenté par ^I) suivi de quatre espaces sur la dernière ligne.

Je ne suis pas sûr de ce que l'outil équivalent sur Windows serait, mais le Mac devrait avoir la commande cat -A. Il vous montrera où se trouvent les onglets par rapport aux espaces.


Il y a un programme appelé reindent.py qui convertit les tabulations en espaces pour vous:

reindent.py test.py 

Sur Unix il y a aussi une commande unexpand qui convertit les espaces en tabulations.


La plupart des programmeurs Python utilisent des espaces plutôt que des tabulations pour l'indentation. La plupart du code Python que vous trouverez sur le Web utilisera des espaces plutôt que des onglets.

Votre éditeur peut ajouter des onglets, mais si vous avez pris un extrait de code sur le Web, votre fichier peut maintenant contenir à la fois des tabulations et des espaces. Il est plus facile de suivre le flux et d'adopter la convention d'espaces-indentation, de sorte que vous n'aurez pas à reformater autant de code d'autres personnes. Par ailleurs, l'adoption de la convention espaces-indentation ne signifie pas que vous devez appuyer sur SPACE 4 fois pour chaque niveau d'indentation. Votre éditeur doit avoir une option de configuration qui permet d'appuyer sur TAB insérer 4 espaces.

+1

+1 Il est évident qu'il devait y avoir des onglets mélangés avec des espaces, mais montrer à l'OP comment les trouver est un bon bonus! – Veger

+0

Merci pour l'aide, je vais essayer. Edit - c'est très étrange. J'ai enlevé l'onglet où je recevais l'erreur, et pressé l'espace 4 fois et il est parti. Donc, l'onglet a causé une erreur mais pas 4 espaces. Je suis confus, ne devraient-ils pas être exactement le même espacement? – user1104854

+0

@ user1104854: Ils * semblent * identiques sur un éditeur qui formate un TAB de la même manière que 4 espaces, mais tous les éditeurs ne sont pas identiques. Python n'assume aucune relation entre les tabulations et les espaces, il n'a donc aucune idée de ce que l'indentation niveau 1 et 4 espaces sont censés signifier. En Python, la règle est ** jamais ** mélanger les onglets et les espaces pour l'indentation. – unutbu

2

Ceci est un problème courant en Python. Les conseils suivants peuvent vous aider:

1) Ne jamais mélanger des espaces et des languettes. Pour les nouveaux projets, utilisez des espaces plutôt que des tabulations. Voir PEP8 Ma recommandation est d'utiliser 4 espaces.

2) Modifier les valeurs par défaut pour la longueur des onglets dans Komodo, afin de détecter plus facilement les mixages. Appuyez sur le menu Edit > Preferences, puis dans le Editor settings:

  • Décocher, Prefer Tab characters over spaces.
  • Utilisez 4 pour Number of spaces for indent
  • utiliser une valeur différente (8 par exemple) pour width of each tab character

3) Le script reindent.py dans C:\Python2x\Tools\Scripts\ peut vous aider à Réindente fichiers correctement

-d (--dryrun) Dry run. Analyze, but don't make any changes to, files. 
-r (--recurse) Recurse. Search for all .py files in subdirectories too. 
-n (--nobackup) No backup. Does not make a ".bak" file before reindenting. 
-v (--verbose) Verbose. Print informative msgs; else no output. 
-h (--help)  Help.  Print this usage information and exit. 

Change Python (.py) files to use 4-space indents and no hard tab characters. 
Also trim excess spaces and tabs from ends of lines, and remove empty lines 
at the end of files. Also ensure the last line ends with a newline. 

J'espère ça aide

+0

Merci pour les conseils – user1104854

1

Comme personne d'autre ne l'a mentionné, il y a un moyen facile de rendre les espaces visibles à l'intérieur Komodo lui-même. Vous n'avez pas besoin d'utiliser d'outils externes.

Sélectionnez simplement Afficher/Afficher les espaces dans le menu ou utilisez le raccourci clavier Ctrl + Maj + 8 sous Windows. Répétez pour le désactiver.

Lorsque vous êtes dans le menu Affichage, découvrez d'autres fonctions utiles. Je trouve les guides d'indentation particulièrement utiles et les laissons allumés tout le temps. Voir EOL Markers est également utile de temps en temps.