Skip to content

Commit ec59a4f

Browse files
committed
addressing reviews CL#1
1 parent f024141 commit ec59a4f

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

pandas/_libs/tslib.pyx

+15-7
Original file line numberDiff line numberDiff line change
@@ -607,11 +607,11 @@ cpdef array_to_datetime(
607607
# to check if all arguments have the same tzinfo
608608
tz = py_dt.utcoffset()
609609

610-
except (ValueError, OverflowError):
610+
except (ValueError, OverflowError) as err:
611611
if is_coerce:
612612
iresult[i] = NPY_NAT
613613
continue
614-
raise TypeError("invalid string coercion to datetime")
614+
raise type(err)(f"invalid string coercion to datetime for \"{val}\" at position {i}")
615615

616616
if tz is not None:
617617
seen_datetime_offset = True
@@ -798,6 +798,7 @@ cdef _array_to_datetime_object(
798798
# We return an object array and only attempt to parse:
799799
# 1) NaT or NaT-like values
800800
# 2) datetime strings, which we return as datetime.datetime
801+
# 3) special strings - "now" & "today"
801802
for i in range(n):
802803
val = values[i]
803804
if checknull_with_nat_and_na(val) or PyDateTime_Check(val):
@@ -811,17 +812,24 @@ cdef _array_to_datetime_object(
811812
if len(val) == 0 or val in nat_strings:
812813
oresult[i] = 'NaT'
813814
continue
815+
814816
try:
815-
oresult[i] = parse_datetime_string(val, dayfirst=dayfirst,
817+
# Handling special case strings today & now
818+
if val == "today":
819+
oresult[i] = datetime.today()
820+
elif val == "now":
821+
oresult[i] = datetime.now()
822+
else:
823+
oresult[i] = parse_datetime_string(val, dayfirst=dayfirst,
816824
yearfirst=yearfirst)
817-
pydatetime_to_dt64(oresult[i], &dts)
818-
check_dts_bounds(&dts)
819-
except (ValueError, OverflowError):
825+
pydatetime_to_dt64(oresult[i], &dts)
826+
check_dts_bounds(&dts)
827+
except (ValueError, OverflowError) as err:
820828
if is_coerce:
821829
oresult[i] = <object>NaT
822830
continue
823831
if is_raise:
824-
raise ValueError(f"Unable to parse string \"{val}\" at position {i}")
832+
raise type(err)(f"Unable to parse string \"{val}\" at position {i}")
825833
return values, None
826834
else:
827835
if is_raise:

pandas/_libs/tslibs/parsing.pyx

+3-8
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ def parse_datetime_string(
261261
datetime dt
262262

263263
if not _does_string_look_like_datetime(date_string):
264-
raise ValueError('Given date string not likely a datetime.')
264+
raise ValueError(f'Given date string {date_string} not likely a datetime.')
265265

266266
if does_string_look_like_time(date_string):
267267
# use current datetime as default, not pass _DEFAULT_DATETIME
@@ -282,17 +282,12 @@ def parse_datetime_string(
282282
pass
283283

284284
try:
285-
if date_string == "today":
286-
dt = datetime.today()
287-
elif date_string == "now":
288-
dt = datetime.now()
289-
else:
290285
dt = du_parse(date_string, default=_DEFAULT_DATETIME,
291286
dayfirst=dayfirst, yearfirst=yearfirst, **kwargs)
292287
except TypeError:
293288
# following may be raised from dateutil
294289
# TypeError: 'NoneType' object is not iterable
295-
raise ValueError('Given date string not likely a datetime.')
290+
raise ValueError(f'Given date string {date_string} not likely a datetime.')
296291

297292
return dt
298293

@@ -368,7 +363,7 @@ cdef parse_datetime_string_with_reso(
368363
int out_tzoffset
369364

370365
if not _does_string_look_like_datetime(date_string):
371-
raise ValueError('Given date string not likely a datetime.')
366+
raise ValueError(f'Given date string {date_string} not likely a datetime.')
372367

373368
parsed, reso = _parse_delimited_date(date_string, dayfirst)
374369
if parsed is not None:

0 commit comments

Comments
 (0)