2013-06-07 13 views
13

Mam zmienną i muszę wiedzieć, czy jest to obiekt datetime.Wykryj, czy zmienna jest obiektem datetime

tej pory używam następujący siekać w funkcji do wykrywania datetime obiektu:

if 'datetime.datetime' in str(type(variable)): 
    print('yes') 

Ale tak naprawdę powinien być sposób, aby wykryć, jaki typ obiektu jest coś. Podobnie jak mogę zrobić:

if type(variable) is str: print 'yes' 

Czy istnieje sposób, aby to zrobić inny niż hack toczenia nazwę typu obiektu w ciąg i widząc jeśli ciąg zawiera 'datetime.datetime'?

+0

Huh? Czy nie jest to dokładnie to, do czego służy 'isinstance()'? – Celada

+0

Dlaczego chcesz to zrobić? – Daenyth

+0

@ Daenyth Istnieją często ważne powody, dla których pisanie na kaczkach nie działa w takiej czy innej sytuacji. Ale porównywanie reprezentacji łańcuchowej nazwy typu, jak robi to OP? To nie może być prawda! – Celada

Odpowiedz

33

Trzeba isinstance(variable, datetime.datetime):

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> isinstance(now, datetime.datetime) 
True 
+1

Nie dla innych, powinno to być na ogół najlepsze, ponieważ jest bardziej elastyczne niż "typ (zmienna) == datetime.datetime", a także daje "True" dla obiektów znaczników czasu "pandy" i prawdopodobnie innych formatów znaczników czasu. – ryanjdillon

6

Zastosowanie isinstance.

if isinstance(variable,datetime.datetime): 
    print "Yay!" 
3

isinstance jest twoim przyjacielem

>>> thing = "foo" 
>>> isinstance(thing, str) 
True 
+1

dobrych facetów pracy. dobra robota. – TehTris

2

Podczas korzystania isinstance będą robić to, co chcesz, to nie jest bardzo „pythonic”, w tym sensie, że jest lepiej prosić o przebaczenie niż pozwolenie.

try: 
    do_something_small_with_object() #Part of the code that may raise an 
            #exception if its the wrong object 
except StandardError: 
    handle_case() 

else: 
    do_everything_else() 
0

Wierzę, że wszystkie powyższe odpowiedzi będą działać tylko wtedy, gdy data jest typu datetime.datetime. Co się stanie, jeśli obiekt daty jest typu datetime.time lub datetime.date?

W ten sposób znajduję obiekt datetime. To zawsze działało dla mnie. (Python2 & Python3):

import datetime 
type(date_obj) in (datetime, datetime.date, datetime.datetime, datetime.time) 

Testowanie w python2 lub Python3 skorupy:

import datetime 
d = datetime.datetime.now() # creating a datetime.datetime object. 
date = d.date() # type(date): datetime.date 
time = d.time() # type(time): datetime.time 

type(d) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
type(date) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
type(time) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
Powiązane problemy