OVH Cloud OVH Cloud

Comment verifier qu'une variable est de type DateTime

38 réponses
Avatar
Richard
import mx.DateTime
import types

a=mx.DateTime.now()

je voudrais faire
if type(a) is types.DateTimeType:

mais DateTimeType n'existe pas dans la lib types (ce qui est surement
normal vu que mx est externe a python)
mais alors on fait comment ?
type(a) renvoit
<type 'DateTime'>

merci

RM

8 réponses

1 2 3 4
Avatar
jean-michel bain-cornu
if type(a) is DateTime:
#do whatever


mais plutôt que de vérifier le type, pourquoi pas un
try/except autour de ce que tu veux faire


En plus de ce qui as déjà été dit, il me semble que le test est plus
précis que l'exception. On regarde vraiment si il s'agit d'une date,
alors que l'exception est déclenchée au mieux sur une erreur de type, et
au pire sur n'importe quoi, ce qui dans les deux cas peut avoir des
effets de bord dévastateurs.
A+
jm

Avatar
stephane
if type(a) is DateTime:
#do whatever


mais plutôt que de vérifier le type, pourquoi pas un try/except au tour
de ce que tu veux faire



En plus de ce qui as déjà été dit, il me semble que le test est plus
précis que l'exception. On regarde vraiment si il s'agit d'une date,
alors que l'exception est déclenchée au mieux sur une erreur de typ e, et
au pire sur n'importe quoi, ce qui dans les deux cas peut avoir des
effets de bord dévastateurs.


Test ou exception sont sémentiquement liées. L'usage de l'un ou de
l'autre n'est qu'une question de contexte. Ce dernier étant plutôt
subjectif puisque interprété par l'utilisateur (programmeur). A suivr e
ce fil il est assez clair, imha, que toute réponse est avant tout
empirique ...d'où les tautologies qui s'en suivent.

Cordialement,

Stéphane.


Avatar
Eric Deveaud
jean-michel bain-cornu wrote:
if type(a) is DateTime:
#do whatever


mais plutôt que de vérifier le type, pourquoi pas un
try/except autour de ce que tu veux faire


En plus de ce qui as déjà été dit, il me semble que le test est plus
précis que l'exception. On regarde vraiment si il s'agit d'une date,
alors que l'exception est déclenchée au mieux sur une erreur de type, et
au pire sur n'importe quoi, ce qui dans les deux cas peut avoir des
effets de bord dévastateurs.


poser correctement le type de l'exception, non ?? ;-)

Eric

--
Bonjour je sais qu il existe un prog pour faire des cartes bancaires
puis je l avoir par mail pas pour en fabriquer mais par curiosite
merci a tous
-+- LM In GNU : La cléf pour fabriquer un neuneu enfin dévoilée -+-


Avatar
Eric Jacoboni
Christophe writes:

StopIteration n'est pas ici juste un truc interne au protocole
d'iteration. C'est un point important à connaitre quand on pousse un
peu les iterateurs. Que ce soit pour consomer des valeures de façon
non conventionelle ou pour créer de toute pièce un iterateur qui
devrai bien un jour ou l'autre annoncer au monde qu'il n'a plus de
valeurs à renvoyer :)


Voilà... "quand on pousse un peu" et "non conventionnelle", ce qui
ne représente donc pas la plupart des cas.

Je n'ai rien contre les exceptions, hein (je les utilisais déjà en 83
avec Ada, donc ce n'est pas une découverte). Je suis contre leur
utilisation systématique, nuance.

--
Eric Jacoboni, ne il y a 1448895161 secondes

Avatar
Eric Jacoboni
Christophe writes:

Bah moi je préfère faire :

a = dict(...)

try:
return a["toto"]
except KeyError:
return None

Que de faire :

if "toto" in a:
return a["toto"]
else:
return None

C'est plus optimisé comme code :)


Chacun son truc, hein... Vous devriez relire Hoare et Knuth :)

--
Eric Jacoboni, ne il y a 1448896358 secondes

Avatar
Eric Jacoboni
Christophe writes:

Chacun son truc, hein... Vous devriez relire Hoare et Knuth :)



Jamais lu, tu peux détailler ? :p


En gros, ça dit que, la majeure partie du temps, une optimisation
prématurée est la source de tous les maux (premature optimization is
the root of all evil). C'est comme le "Goto considered harmful" de
Dijkstra, ça fait partie des dictons de base ;)

Tu trouveras une tonne de pages web là-dessus en recherchant
"premature optimization" sur Google.
--
Eric Jacoboni, ne il y a 1448900839 secondes


Avatar
jean-michel bain-cornu
Eric Deveaud wrote:
jean-michel bain-cornu wrote:

if type(a) is DateTime:
#do whatever


mais plutôt que de vérifier le type, pourquoi pas un
try/except autour de ce que tu veux faire


En plus de ce qui as déjà été dit, il me semble que le test est plus
précis que l'exception. On regarde vraiment si il s'agit d'une date,
alors que l'exception est déclenchée au mieux sur une erreur de type, et
au pire sur n'importe quoi, ce qui dans les deux cas peut avoir des
effets de bord dévastateurs.



poser correctement le type de l'exception, non ?? ;-)

Eric

D'accord, on a bien : TypeError. Mais si je programme :

si le type de ma variable est DateTime:
alors j'agis
C'est plus précis que de dire :
j'essai un traitement:
tout va bien
si j'ai une erreur de type
je fais autre chose
Parce que l'erreur de type peut venir d'autre chose qu'une variable
n'étant pas une DateTime, ce qui peut être piégeant. Et ne connais pas
d'exception déclenchée *précisément* sur un type non DateTime.
Bon d'accord je chipote. Mais au point où on en est...
A+
jm



Avatar
Eric Jacoboni
jean-michel bain-cornu writes:

D'accord, on a bien : TypeError. Mais si je programme :
si le type de ma variable est DateTime:
alors j'agis


Moi, je dirai plutôt :

si ma variable se comporte comme un DateTime:
alors j'agis

Parce que je pourrai avoir envie d'utiliser éventuellement un
DateHeure fait maison, qui ne soit pas une classe fille de DateTime
mais qui supporte ses fonctionnalités (l'histoire du truc qui fait
couac et qui marche comme un canard, quoi...).

--
Eric Jacoboni, ne il y a 1448924841 secondes

1 2 3 4