Pythonのdateutilライブラリは(およびそれ以上)、このために設計されています。これは自動的にこれをdatetimeオブジェクトに変換し、変換ValueErrorできない場合はを発生させます。
例として:
>>> from dateutil.parser import parse
>>> parse("2003-09-25")
datetime.datetime(2003, 9, 25, 0, 0)
ValueError日付の形式が正しくない場合は、これが発生します。
>>> parse("2003-09-251")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 720, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 317, in parse
    ret = default.replace(**repl)
ValueError: day is out of range for month
dateutilほとんどの既知の形式をインテリジェントに処理でき、仕様を変更できるため、将来的に他の形式の解析が必要になった場合にも非常に役立ちます。dateutil解析例。  
また、必要に応じてタイムゾーンも処理します。
コメントに基づいた更新:日付があいまいな場合に、日または月のどちらを最初にするかを制御するparseキーワード引数も受け入れますdayfirst。デフォルトはFalseです。例えば
>>> parse('11/12/2001')
>>> datetime.datetime(2001, 11, 12, 0, 0) # Nov 12
>>> parse('11/12/2001', dayfirst=True)
>>> datetime.datetime(2001, 12, 11, 0, 0) # Dec 11