Skip to content

Commit e725875

Browse files
committed
separate raising code
1 parent 003d777 commit e725875

File tree

1 file changed

+49
-17
lines changed

1 file changed

+49
-17
lines changed

pandas/core/tools/datetimes.py

+49-17
Original file line numberDiff line numberDiff line change
@@ -238,28 +238,31 @@ def _convert_listlike_datetimes(arg, box, format, name=None, tz=None,
238238

239239
result = None
240240
tz_parsed = None
241-
try:
242-
if format is not None:
241+
242+
if format is not None:
243+
try:
243244
result = _parse_with_format(arg, tz, name, box, format,
244245
errors, exact, infer_datetime_format)
246+
except ValueError as e:
247+
return _parse_fallback(arg, name, tz, e)
248+
249+
if result is not None:
250+
return _maybe_box_date_results(result, box, tz, name, tz_parsed)
245251

246-
if result is None:
247-
assert format is None or infer_datetime_format
248-
result, tz_parsed = tslib.array_to_datetime(
249-
arg,
250-
errors=errors,
251-
utc=tz == 'utc',
252-
dayfirst=dayfirst,
253-
yearfirst=yearfirst,
254-
require_iso8601=require_iso8601
255-
)
252+
assert result is None
253+
assert format is None or infer_datetime_format
256254

255+
try:
256+
result, tz_parsed = tslib.array_to_datetime(
257+
arg,
258+
errors=errors,
259+
utc=tz == 'utc',
260+
dayfirst=dayfirst,
261+
yearfirst=yearfirst,
262+
require_iso8601=require_iso8601
263+
)
257264
except ValueError as e:
258-
try:
259-
values, tz = conversion.datetime_to_datetime64(data)
260-
return DatetimeIndex._simple_new(values, name=name, tz=tz)
261-
except (ValueError, TypeError):
262-
raise e
265+
return _parse_fallback(arg, name, tz, e)
263266
else:
264267
return _maybe_box_date_results(result, box, tz, name, tz_parsed)
265268

@@ -329,6 +332,35 @@ def _parse_with_format(data, tz, name, box, fmt,
329332
return result
330333

331334

335+
def _parse_fallback(data, name, tz, err):
336+
"""
337+
If a ValueError is raised by either _parse_with_format or
338+
array_to_datetime, try to interpret the data as datetime objects.
339+
340+
Parameters
341+
----------
342+
data : np.ndarray[object]
343+
name : object
344+
Name to attach to returned DatetimeIndex
345+
tz : None, str, or tzinfo object
346+
err : ValueError instance
347+
348+
Returns
349+
-------
350+
DatetimeIndex
351+
352+
Raises
353+
------
354+
ValueError : if data cannot be interpreted as datetime objects.
355+
"""
356+
from pandas import DatetimeIndex
357+
try:
358+
values, tz = conversion.datetime_to_datetime64(data)
359+
return DatetimeIndex._simple_new(values, name=name, tz=tz)
360+
except (ValueError, TypeError):
361+
raise err
362+
363+
332364
def _maybe_box_date_results(result, box, tz, name, tz_parsed=None):
333365
"""
334366
If requested, wrap the parsing results in an Index object, DatetimeIndex

0 commit comments

Comments
 (0)