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 :

utiliser l' élement de la fonction1 dans la fonction 2 sans variable globale! [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut utiliser l' élement de la fonction1 dans la fonction 2 sans variable globale!
    Voici mon code. je suis nouvelle sur ce Forum. j aimerai utiliser le lien fourni dans la première fonction dans la deuxieme je ne sais pas trop comment. J ai utilisé une variable globale mais Problème non résolu.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    import   string, sys,os,win32ui,win32con
    def On_Application_LayoutManagement_Schnittstellen0020FPGA2_Push0020Button_1960_ButtonClicked(sender, button):
        """Parameters: sender, button
        """
        print 'select file!'
        global doc
        dialog = win32ui.CreateFileDialog(1,'','', 0,'Csv |*.csv')
        dialog.SetOFNTitle('Select CSV File')
        if dialog.DoModal() == win32con.IDOK:
            print dialog.GetPathName().replace('\\','/')
            doc=dialog.GetPathName().replace('\\','/')
     
            msge= Application.LayoutManagement.ActiveLayout.GetInstrument ('MsgBox')
            msge.Value= dialog.GetPathName().replace('\\','/')
     
    def On_Application_LayoutManagement_Schnittstellen0020FPGA2_Push0020Button_1961_ButtonClicked(sender, button):
        """
     Parameters: sender, button
        """
     
        datei=doc
        name = []
        value = []
        #liste = []
        liste=['AO_1','AO_2','AO_3','AO_4','AO_5','AO_6','Interupt_Faktor_10ns']
        index1 = liste.index('AO_1')  
        index2 = liste.index('AO_2')
        obj = open(datei,'r')
        for zeile in obj:
            zeile = zeile.rstrip("\n")
            i = 0
            while i < len(liste):
                if liste[i] in zeile:   
                    teile = zeile.split(';') 
                    name.append(str(teile[0])) 
                    value.append(float(teile[1])) 
                i = i+1
        obj.close()
    je ne comprend pas cette erreur.
    obj = open(datei,'r') -->>>>TypeError: coercing to Unicode: need string or buffer, type found

    Merci pour toute Aide et tout Conseil.
    Davidmir

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Salut,

    Ben bienvenue dans le forum.

    Pour savoir ce que contient "doc" i.e. "datei", il suffirait de faire un print "avant" ou de lancer le debugger et placer un breakpoint.
    note: comme vous ne postez pas un code complet, pas facile de vous en dire plus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'ai pas épluché ton code, mais il y a une façon pratique de permettre le partage de données entre plusieurs fonctions: placer ces fonctions en tant que méthodes dans une même classe. Dans cette classe, tout ce qui sera créé avec le préfixe "self" sera commun à chaque instance de cette classe. On peut aussi avoir des données communes à la classe elle-même, et donc communes à toutes les instances de classe.

    Voilà un petit exemple à exécuter pour voir comment ça marche:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division, print_function
    # Python 2.7 ou 3
     
    class Toto(object):
     
        x = 0  # x est une variable commune à la classe
     
        def __init__(self):
     
            self.y = "une chaine"  # y est une variable commune à l'instance de classe
     
        def methode1(self):
     
            self.y = "une autre chaine"
     
            Toto.x = 5
     
        def methode2(self):
     
            print(self.y)
     
            print(Toto.x)
     
     
    maclasse1 = Toto()
     
    maclasse1.methode1()
     
    maclasse1.methode2()
     
     
    maclasse2 = Toto()
     
    maclasse2.methode2()

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    En fait le print existe déjà dans la première fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        if dialog.DoModal() == win32con.IDOK:
            print dialog.GetPathName().replace('\\','/')
            doc=dialog.GetPathName().replace('\\','/')
    mais si l'on clique sur le bouton 1961 avant le bouton 1960, ça ne marche pas évidement.

    D'autre part, si doc est déclaré global dans la première fonction qu'est-ce qui gène de le faire aussi dans la deuxième fonction ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Salut,

    Déclarer doc en global dans la deuxième fonction n'apporte rien: la variable étant accédée en lecture, elle doit être assignée avant.
    Le "print" affiche ce qui va être assigné à la variable "doc" par la fonction et l'important est que ce sera toujours un "str".
    Ce qui, vu l'exception, est incohérent avec ce qui est récupéré par la fonction qui appelle "open".
    => si çà plante, c'est bien parce que la variable est assigné a autre chose que ce qui est espéré, non?

    Vu que c'est une variable "globale" et que nous ne voyons qu'une partie du code, on peut toujours "conjecturer" avec plus ou moins de bonheur...
    On peut aussi proposer de structurer le code avec des classes mais si c'est juste pour s'assurer que le "doc" récupéré par la 2ème fonction est bien celui assigné par la première, renommer la variable "doc" en "docXXX" suffirait...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut
    Salut,
    je n´ai pas fini de rédiger mon code. J ai posté la première partie car c est la que j ai des erreurs.
    la deuxieme partie du code consistera juste a attribuer des variables de la plattform. Pour la suite je pense que ca ira.

    je ne comprend pas cette erreur.
    obj = open(datei,'r') -->>>>TypeError: coercing to Unicode: need string or buffer, type found
    La suite ressemblera juste a ca::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     a=Application.ActiveExperiment.Platforms["ds1006_2"].ActiveVariableDescription.Variables['Model Root/Parameter_FPGA1_senden/4_FPGA_AO/AO_1/Value']
        indexa = namen.index(liste[index1])
        a.ValueConverted = zahlenwerte[indexa]
     
        b=Application.ActiveExperiment.Platforms["ds1006_2"].ActiveVariableDescription.Variables['Model Root/Parameter_FPGA1_senden/4_FPGA_AO/AO_2/Value']
        indexb= namen.index(liste[index2])
        b.ValueConverted = zahlenwerte[indexb]
    Merci

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Citation Envoyé par davidmir Voir le message
    je ne comprend pas cette erreur.
    obj = open(datei,'r') -->>>>TypeError: coercing to Unicode: need string or buffer, type found
    L'erreur dit simplement que datei est un objet de type "type" et qu'il ne peut pas le convertir en string.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> b = type
    >>> f = open(b, 'r')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: coercing to Unicode: need string or buffer, type found
    >>>
    La variable ne contient pas ou plus ce que vous espérez avoir mis dedans...

    - W
    PS: et j'en ai profité pour préciser que vous utilisez Python 2.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 14
    Par défaut
    @wiztricks ,
    merci d avoir préciser que j utilise Python 2.
    J'ai utilisé les mêmes lignes de code pour un autre Démo-projet cela a fonctionné. Je suis un peu déboussolée de savoir que mon code ne fonctionne pas dans le projet actuel.
    Surement la Version de python en est le Problème.
    >>> f = open(datei, 'rb')
    j ai parfois vu aussi cette écriture mais hélas.
    Et même cette histoire de variable globale non déclaré, Jai pas eu ce problème dans l ' autre projet.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/11/2009, 11h13
  2. Réponses: 2
    Dernier message: 29/09/2008, 10h10
  3. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  4. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12
  5. pb d'utilisation du resultat d'1 requete dans 1 autre
    Par joquetino dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2004, 15h58

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