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 éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    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
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  2. #2
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    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 éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    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 ....
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    Membre expérimenté
    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
    Points : 1 384
    Points
    1 384
    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 éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    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
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  6. #6
    Expert éminent sénior
    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 : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    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 éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    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
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    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