212 votes

La négation en Python

J'essaie de créer un répertoire si le chemin n'existe pas, mais l'opérateur ! (not) ne fonctionne pas. Je ne suis pas sûr de savoir comment annuler en Python... Quelle est la bonne façon de procéder ?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()

20 votes

D'ailleurs, pourquoi ne pas utiliser l'outil Python os.mkdir() ?

1 votes

Je ne connaissais pas la fonction os.mkdir(), même si je pensais qu'il existait quelque chose de ce genre.

2 votes

C'est mieux ici de juste try: os.mkdir(path) et traiter l'erreur. Si vous vérifiez d'abord ("regarder avant de sauter"), quelqu'un d'autre peut créer ou supprimer ce dossier après votre vérification (mais avant que vous ne le créiez), et il pourrait toujours y avoir une erreur. La vérification ne garantit rien au moment de la création. Cette idée est parfois appelée "Il est plus facile de demander le pardon que la permission . Encore mieux (mais encore plus spécifique à ce problème), vous pouvez faire os.makedirs(path, exist_ok=True) pour créer le chemin et ignorer un FileExistsError .

289voto

Karl Nicoll Points 5915

L'opérateur de négation en Python est not . Il suffit donc de remplacer votre ! con not .

Pour votre exemple, faites ceci :

if not os.path.exists("/usr/share/sounds/blues") :
    proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
    proc.wait()

Pour votre exemple spécifique (comme Neil l'a dit dans les commentaires), vous n'avez pas besoin d'utiliser la fonction subprocess vous pouvez simplement utiliser os.mkdir() pour obtenir le résultat dont vous avez besoin, avec une meilleure gestion des exceptions.

Ejemplo:

blues_sounds_path = "/usr/share/sounds/blues"
if not os.path.exists(blues_sounds_path):
    try:
        os.mkdir(blues_sounds_path)
    except OSError:
        # Handle the case where the directory could not be created.

38voto

Cat Plus Plus Points 53385

Python préfère les mots-clés anglais à la ponctuation. Utilisez not x c'est-à-dire not os.path.exists(...) . Il en va de même pour && y || qui sont and y or en Python.

15voto

mshell_lauren Points 980

Essayez plutôt :

if not os.path.exists(pathName):
    do this

3voto

chmullig Points 6181

En combinant les contributions de tous les autres (utiliser not, pas de parenthèses, utiliser os.mkdir ) vous obtiendriez...

special_path_for_john = "/usr/share/sounds/blues"
if not os.path.exists(special_path_for_john):
    os.mkdir(special_path_for_john)

2 votes

Votre code (et celui de l'OP) est un accident en attente de se produire -- deux instances d'une longue chaîne littérale qui devrait vraisemblablement être identique. Et s'il vous plaît, ne répondez pas que c'est juste un exemple -- c'est un MAUVAIS exemple pour les débutants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X