Forum Programmation.python exceptions imbriquées

Posté par .
Tags : aucun
1
11
juin
2010

Hello,

Dans un de mes programmes je cherche à transformer une chaîne en date. La chaîne peut avoir divers formats j'essaie donc tous les formats jusqu'à en trouver un qui marche mais pour ça j'ai une série d'exceptions imbriquées et je trouve que c'est très moche. Qu'est-ce que je pourrais faire de plus sympa en python ?

try:
d = time.strptime(s[:18], "%Y:%m:%d %H:%M:%S")
except :
try:
d = time.strptime(s[:16], "%Y:%m:%d %H:%M")
except :
try:
d = time.strptime(s[:16], "%Y:%m:%d:%H:%M")
except:
try:
d = time.strptime(s[:16], "%d/%m/%Y %H:%M") #14/02/2009 18:16
except :
try:
d = time.strptime(s[:16],"%Y-%m-%d %H:%M") #2008-07-31 20:33
except:
try:
d = time.strptime(s[:11], "%b %d %Y") #Nov 14 2007
except:
try :
d = time.strptime(s[:11],"%d %b %Y") #31 May 2009 12:4
except:
d = None
  • # y a pas d'expression ET/OU en python ?

    Posté par . Évalué à 2.

    il suffirait alors de faire un ligne qui test si c'est ce motif OU celui là OU cet autre motif
  • # return

    Posté par . Évalué à 2.

    try:
            return time.strptime(s[:18], "%Y:%m:%d %H:%M:%S")
    except:
    try:
            return time.strptime(s[:16], "%Y:%m:%d %H:%M")
    except:
    try:
    ...
    • [^] # Re: return

      Posté par . Évalué à 2.

      ca economise les indentions, mais ca ne change rien au code :p
      • [^] # Re: return

        Posté par . Évalué à 2.

        C'est déjà ça :)
        Mais la proposition d'en dessous est beaucoup mieux.
  • # Une boucle...

    Posté par (page perso) . Évalué à 8.

    ... dans le genre :


    d = None
    for format, length in (('%Y:%m:%d %H:%M:%S', 18), ('"%Y:%m:%d %H:%M', 16), ...):
    ....try:
    ........d = time.strptime(s[:length], format)
    ....except:
    ........continue
    ....break
    • [^] # Re: Une boucle...

      Posté par . Évalué à 2.

      Vendu ! c'est exactement ce dont j'ai besoin. et propre et élégant.

      Merci !
  • # Exepression régulière

    Posté par . Évalué à 2.

    Tu pourrais pas utiliser des exepressions régulières ?

    try :
    if match(bidule) :
    # truc
    elif match(machin) :
    # trac
    ....

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Exepression régulière

      Posté par . Évalué à 1.

      ce ne serait pas beaucoup plus pythonique que mon code actuel et il y aurait en plus des expressions régulières pas piquées des vers à écrire....
  • # hum

    Posté par (page perso) . Évalué à 4.

    pour les journées inférieures à 13 tu ne pourras jamais déterminer si le format de la chaine est MM/JJ ou JJ/MM

    C'est quoi le contexte de cette détection de format ?
    • [^] # Re: hum

      Posté par . Évalué à 1.

      > C'est quoi le contexte de cette détection de format ?

      c'est pour lire des entêtes exif qui sont plutôt au format US (MM/JJ).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.