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 :

assert list string


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut assert list string
    Bonjour,

    Je veux réaliser un assert sur une liste de champs pour vérifier s'il existe bien deux champs qui sont nécessaires au traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champs=[u'FID', u'Shape', u'IDM', u'ORG', u'NOM', u'GEN']
    Si je fais assert 'IDM' in champs, ça fonctionne mais je ne vois pas comment faire pour passer le second paramètre ? A moins de réaliser deux asserts.

    assert ('IDM','GEN') in champs ne fonctionne pas.

    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    A ma connaissance cela n'est pas possible.

    Tu dois le vérifier en deux temps, avec deux if imbriqués par exemple

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    ok ,merci
    ce genre de script n'est pas correct?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try:
        champs_verif1=arcpy.ListFields(table1)
        assert 'IDM'in champs_verif1
        assert 'GEN'in champs_verif1
    except AssertionError:
        print "vérifier la structure des tables"
    merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    assert est une construction de "debug" qui est intéressante car on peut les neutraliser sans éditer le code: pas besoin de les enfermer dans des try..except.. vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    champs_verif1=arcpy.ListFields(table1)
    assert 'IDM' in champs_verif1, "vérifier la structure des tables"
    assert 'GEN' in champs_verif1, "vérifier la structure des tables"
    Si vous voulez remonter l'exception i.e. utilisez AssertionError, il faudrait plutôt écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for v in ('IDM', 'GEN'):
         if v not in champs_verif1:
              raise AssertionError("vérifier la structure des tables")
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    ok, ça roule merci pour les explications

    En fait,j'aurais encore juste une petite question. si je veux faire un assert pour vérifier si la table contient une valeur null
    je pensais que assert champs==None,message pouvait suffire mais cela ne fonctionne pas car j'ai tjrs le message assertionerror même si je n'ai pas de valeurs null.?

    merci d'avance

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    ok alors avec ta deuxieme solution wiztricks cela fonctionne...
    je vois pas trop pourquoi mais bon...

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bernards111 Voir le message
    si je veux faire un assert pour vérifier si la table contient une valeur null. je pensais que assert champs==None,message pouvait suffire mais cela ne fonctionne pas car j'ai tjrs le message assertionerror même si je n'ai pas de valeurs null.?
    Bonjour
    C'est nomal, tu demandes de vérifier qu'il y a un null et tu dis toi-même qu'il n'y en a pas. C'est normal que t'aies une remontée d'exception !!!

    Ceci dit, on ne peut pas être égal au néant, on ne peut qu'être ou ne pas être le néant. La bonne syntaxe pour vérifier None est donc assert variable is None. Et ce pour une bonne et simple raison (qui est tout de même un peu plus importante qu'un simple concept de sémantique), c'est que l'opérateur == qui n'a l'air de rien est tout de même très complexe (il peut être surchargé, il fait appel à l'opérateur __eq__ si celui-ci existe, sinon ce sera l'opérateur __cmp__) alors que l'opérateur is reste toujours le plus simple possible et ne peut faire l'objet d'aucune surcharge.

    Un exemple simple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> class toto:
    ...   def __eq__(self, x): return True
    ...
    >>> a=toto()
    >>> a == None
    True
    >>> a is None
    False
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [C# 2.0] Détecter les doublons dans une List<string>
    Par Rodie dans le forum Windows Forms
    Réponses: 36
    Dernier message: 30/03/2013, 15h21
  2. List<String> avec jdk1.6.0_01.
    Par shiryuseiya dans le forum Eclipse Java
    Réponses: 13
    Dernier message: 06/04/2008, 10h21
  3. Serialisés et désérialisé une List<String>
    Par Premium dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 28/12/2006, 03h48
  4. Conversion String Collection en List <String>
    Par Seth77 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 21/11/2006, 09h57
  5. Conversion List -> String
    Par Bayard dans le forum Général Python
    Réponses: 1
    Dernier message: 27/11/2005, 21h50

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