IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

os.chdir= ne change pas le répertoire courant et os.chdir() génere une erreur :(


Sujet :

Python

  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut os.chdir= ne change pas le répertoire courant et os.chdir() génere une erreur :(
    Bonsoir

    Il m'arrive quelque-chose de curieux en voici le résultat:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> os.chdir('C:\Dossiers & progs\programation\python')
     
    Traceback (most recent call last):
      File "<pyshell#30>", line 1, in <module>
        os.chdir('C:\Dossiers & progs\programation\python')
    TypeError: 'str' object is not callable
     
     
    >>> os.chdir='C:\Dossiers & progs\programation\python'
    >>> os.chdir
    'C:\\Dossiers & progs\\programation\\python'
     
     
    >>> os.getcwd()
    'E:\\Python26'

    je reste coi quand à ce comportement car il me semble que cela fonctionnait il y a quelques jours....


    si vous avez une idée


    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Il faut doubler les \ où utiliser une "raw string":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> os.chdir(r'C:\Dossiers & progs\programation\python')
    Il ne faut surtout pas écrire os.chdir = ..., en faisant cela, tu écrases la fonction chdir en la remplaçant par une string. D'où le message d'erreur (str object is not callable), car avant le morceau de code que tu donnes, tu as déjà dû faire os.chdir=...

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    merci beaucoup, ça marche, mais pourquoi-cela ne fonctionnait-il pas avec la méthode '=' ? cela change pourtant la valeur.... à moins que chdir ne soit une variable surchargée par une fonction ....

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Une fonction, c'est une valeur comme un autre que peut prendre une variable, il n'y a pas de surcharge là-dedans.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    >>> def f():
    ... 	return 42
    ... 
    >>> f
    <function f at 0x00D93D70>
    >>> f()
    42
    >>> g = f
    >>> g
    <function f at 0x00D93D70>
    >>> g()
    42
    >>> h = lambda : 42
    >>> h
    <function <lambda> at 0x00D9E9F0>
    >>> h()
    42
    Le dernier exemple (h) rend plus évident le fait que h est une variable qui référence une fonction, mais elle n'est pas différente de f ou g.

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Bien, sûr, mais chdir est elle un objet de type valeur ou de type fonction ?

    et si c'est un objet de type valeur, pourquoi l'opréation "chdir=..." n'a pas le même résultat que "chdir(...)"


    et dans le cas contraire, comment se fait-il que le compilo accepte chdir="string"
    alors qu'il ne devrais accepter que des fonctions.... ?

    (et pourquoi ça ne change pas os.getcwd() )


    merci

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Il me semble qu'il y a pas mal de choses que tu n'as pas comprises en python.

    quand tu fais os.chdir = ..., tu recréé une variable os.chdir qui va "écraser" l'ancienne référence. Et la variable peut être de n'importe quel type.

    Par défaut quand tu importe le module os, os.chdir est une fonction. Pour t'en convaincre il suffit de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import os
    >>> os.chdir
    <built-in function chdir>
    >>> os.chdir = "toto"
    >>> os.chdir
    toto
    Donc si tu redéfinis os.chdir, tu n'auras donc plus accès à la fonction initiale et os.chdir() génèrera une erreur vu que os.chdir ne sera plus une fonction.

  7. #7
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    ok, je comprend,


    juste une petite question subsidiaire : après avoir fait "os.chdir=..." os.chdir est-elle une variable locale(chdir) de os ou une variable globale (os.chdir) de l'endroit ou on a lancé cette instruction ?

    merci

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Par défaut
    C'est une variable du module "os". Une globale du module, si tu veux.

    Pour creer une variable locale il aurait fallut que tu fasses
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from os import chdir
    chdir = ""
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/07/2010, 19h57
  2. [File] Problème de répertoire courant
    Par seb_asm dans le forum Applets
    Réponses: 5
    Dernier message: 03/05/2005, 19h44
  3. Frames : adresse ne change pas
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/02/2005, 16h56
  4. [JSP] Récupérer le répertoire courant
    Par dafly dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 10/06/2004, 11h01
  5. répertoire courant ".\"
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 10/03/2004, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo