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 :

[AIDE]Question sur les interruptions, comment ne pas exécuter une partie de code


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 130
    Points : 373
    Points
    373
    Par défaut [AIDE]Question sur les interruptions, comment ne pas exécuter une partie de code
    Bonjour à tous,

    Je reprend du code (mal conçu), et j'ai besoin d'en faire ressortir quelque chose rapidement. (sous entendu je n'est pas le temps de tout réécrire)

    Le programme agit grosso modo comme suis:
    Une extraction consiste à récupérer un portion de texte dans un fichier .txt, les données extraites sont ensuite stockées dans des tableaux afin de les exploitées plus tard dans le programme.

    Extraction de donnée 1
    Extraction de donnée 2.a
    Extraction de donnée 2.b
    Extraction de donnée 2.c
    Extraction de donnée 3
    ..
    ..
    Extraction de donnée 300
    ....


    Hors de temps à autre l'une des Extractions plante.
    Je ne peut pas juste me permettre de négliger la donnée qui plante car les données sont liées entre elles dans le traitement.
    Il faudrait par exemple que quand 2.c plante je puisse ne pas récupérer 2.a et 2.b.

    Ma question est donc la suivante:
    Existe t'il une fonctionnalité python ou une astuce de programmation qui permette d’exécuter une portion complète de code uniquement si cette portion ne lève aucune erreur??

    Merci

    Cordialement

    Azmar

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    les blocs try/except ... ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 130
    Points : 373
    Points
    373
    Par défaut
    J'ai essayé, mais si je fais quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try:
        Extract1()
        Extract2()
        Extract3()
    except: 
        "toto aime le jambon"
    Et que mon exception se lève sur l'instruction "Extract a3" j'aurai déjà exécuté "Extract a1" et "Extract a2", et du coup le mal est déjà fais.

    à moins que je ne dise une bêtise?

    azmar

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Citation Envoyé par azmar Voir le message
    Et que mon exception se lève sur l'instruction "Extract a3" j'aurai déjà exécuté "Extract a1" et "Extract a2", et du coup le mal est déjà fais.
    En gros ce que vous voudriez ressemble a un opération de commit/rollback comme on peut le faire avec un SGDB. try...except est l’ingrédient de base mais les objets Python n'ont pas de 'journal' associé qui permettre de défaire (jusqu’à un certain point) les mises a jour.
    La technique s'appelle mémoire transactionnelle.
    Il y a des langages comme clojure qui implémentent cela en "software".
    Les autres se contentent des pattern memo et command pour realiser un "redo log". Techniquement, si "Extract a3" plante, il faut remettre les objets modifies par "Extract a1" et "Extract a2" dans un etat donne.
    Hmm il va falloir coder un peu quoi.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 130
    Points : 373
    Points
    373
    Par défaut
    C'est malheureusement bien se dont j'avais peur.

    Merci pour ta réponse !

    Azmar

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    Citation Envoyé par azmar Voir le message
    J'ai essayé, mais si je fais quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try:
        Extract1()
        Extract2()
        Extract3()
    except: 
        "toto aime le jambon"
    Et que mon exception se lève sur l'instruction "Extract a3" j'aurai déjà exécuté "Extract a1" et "Extract a2", et du coup le mal est déjà fais.

    à moins que je ne dise une bêtise?

    azmar
    Une extraction consiste à récupérer un portion de texte dans un fichier .txt, les données extraites sont ensuite stockées dans des tableaux afin de les exploitées plus tard dans le programme.
    si c'est à l'extraction que l'erreur est levée, alors réfléchis un peu plus, tu y es presque ...

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 130
    Points : 373
    Points
    373
    Par défaut
    Je m'étais mal exprimé je pense, l'extraction consiste à stocker la donnée, d'ou mon problème.

    Un jeu d'asserts et la gestion de certaines erreurs me permettent de cibler les problèmes, et d'indiquer les zones de non compatibilité.
    Le boulot de correction sera donc fais à la main, ce qui n'est pas très performant mais qui me permet d'assurer la qualité des données utilisées.

    Se programme sert pour traiter un vieux projet ressortis du placard, du coup je vais me contenter de ça. (étant donné que tous les projets récent sont sous un autre format que je maîtrise totalement.)

    Merci à tous pour votre aide.

    Azmar

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Je sais pas si ce serait optimal ou faisable dans ton cas mais en passant par les expressions régulières genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si regex1 match avec donnée 1
       mettre dans tableau
    si regex2 match avec donnée 2   # ou ta regex prendrait en compte les données 2.a 2.b et 2.c
       mettre dans tableau
    si regex6 match avec donnée 3
       mettre dans tableau
    c'est juste une idée comme ça en passant, mais il faut que ton format de fichier soit stable et que les différentes données soient différentiables

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/02/2009, 10h34
  2. Réponses: 4
    Dernier message: 25/03/2008, 17h07
  3. Réponses: 5
    Dernier message: 28/08/2007, 14h00
  4. Question sur les interruptions en mode protégé
    Par Pragmateek dans le forum Assembleur
    Réponses: 9
    Dernier message: 26/10/2006, 22h32
  5. [SQL] Comment ne pas exécuter une clause WHERE si une var est nulle
    Par charlysquare dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/05/2006, 21h12

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