8
votes

Pourquoi Python (IronPython) signale-t-il des "caractères illégaux dans le chemin" lorsque le mot bac est utilisé?

Je reçois une erreur "caractères illégaux dans le chemin" lorsque vous faites des commandes CHDIR dans Iron Python. Cela se passe dans le temps d'exécution avec mon code, mais même dans la console de fer Python, elle a ce problème. J'utilise le module NT car, dans le code, le module OS ne fonctionne pas (semble être un problème connu).

Faire un peu de jeu autour d'il s'avère que les "personnages illégaux" sont en réalité le mot bac. Vous trouverez ci-dessous le texte de la console qui me montre l'erreur uniquement lorsque je navigue dans le répertoire bin.

Voici l'exemple xxx

Quoi de pire Est-ce que je vais naviguer dans un répertoire totalement différent (qui n'a même pas de répertoire bin) et essayer de naviguer vers un sous-répertoire "bin" et je vais toujours obtenir cette erreur!

Des idées?


0 commentaires

3 Réponses :


15
votes

Le séparateur de chemin code> \ code> est également un caractère d'échappement Python. Doublez-les, ou mieux encore, utilisez R '' Code> Les littéraux de Python cru à la place:

r'c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx'
'c:\\Users\\xxxxx\\Documents\\Visual Studio 2010\\Projects\\xxx'


1 commentaires

Doh. Je savais que ça ... Je suppose que ça se trouve que c'était ok échappant à tous ces personnages particuliers sauf B ..... Merci!



6
votes

\ est un caractère d'échappement dans les cordes Python. \ b est de la backpace, c'est pourquoi il est la raison des barfs sur \ bin : Vous ne spécifiez pas le répertoire répertoire \ bin , vous spécifiez le répertoire répertoire dans , qui n'est pas un chemin juridique et même s'il était, n'existe pas.

Vous pouvez écrire la chaîne en doublant les backslashes ou en utilisant le indicateur r comme suggéré par Martijn. Une troisième alternative consiste simplement à utiliser des barres obliques avant dans tous les autres systèmes d'exploitation civilisés. Windows est parfaitement heureux de les utiliser.


4 commentaires

+1 Pour m'apprécier que les fenêtres (que je peux heureusement éviter la plupart du temps) accepte aujourd'hui les séparateurs de chemin '/' comme un système d'exploitation normal.


Je n'utilise jamais les fenêtres me trajet. En fait, je ne génère pas moi-même les chemins, mais en utilisant la classe de chemin .NET pour créer des "chemins spécifiques de la plate-forme". Donc, évidemment, il agira différemment sur Windows que Linux (mon préféré). Évidemment, vous obtenez des problèmes comme celui-ci où je dois maintenant baby-faire, car vous signalez clairement, Windows n'est pas simplement un coup d'articulation, mais juste un système d'exploitation terrible en général.


En fait, il s'avère que le python (le module NT) est le coupable et me donne des chemins sans les doubler ..


@Mike: Non, ce n'est pas le problème. La double barrage (ou une autre solution de contournement) n'est requise que dans la chaîne littéraux. Il reçoit une seule barre oblique inverse dans la chaîne, ce qui est correct.



1
votes

Windows et la plupart des autres systèmes d'exploitation reconnaîtront les barres obliques avant. Donc, au lieu de la barre oblique inverse, de la barre oblique inverse, ou de R '' (plus sur les littéraux de chaîne ici ) Vous pouvez simplement utiliser des barres obliques et vous êtes prêt à partir. La réponse ici est également bien détaillée.

Mise à jour: PS: Utilisez les backslashes et les littéraux de chaîne avec prudence. Vérifiez toujours votre cas spécifique. Il y a un bon commentaire sur cela dans ce Réponse


3 commentaires

Ce n'est en fait pas vrai sur les fenêtres dans toutes les circonstances. Il existe de nombreuses applications, des fonctions dans les fenêtres qui nécessitent \ pour la voie. Ouvrez simplement une invite de commande, tapez «Copier »/directory/file.txt ./LocationDir» et vous verrez ce que je veux dire.


@Mike: Vous avez certainement raison. Je conviens définitivement que cela ne fonctionne pas 100% du temps même dans Windows. Crazy Comment rien n'est jamais complètement universel en ce qui concerne le système d'exploitation. des trucs. J'ai également lu de la réponse que j'ai liée à ma réponse que: "Les chaînes brutes ne sont pas 100% crues, il reste encore un traitement rudimentaire de barreaux au dos."


La réponse ci-dessus avec "tous les autres systèmes d'exploitation civilisés". Je pense que s'applique. Windows a une conception non-sens qui n'est ni bonne pour les utilisateurs, les gens d'affaires, ni les développeurs. J'essaie de faire autant de développement sur Linux que possible pour éviter ce genre de choses. J'ai besoin de garder un décompte des endroits où / n'est pas accepté dans Windows, car un autre gars et moi-même rencontrent celui-ci encore et encore et encore.