Skip to content

Commit fa6f046

Browse files
dannyi96YYYasin19
authored andcommitted
Added improvements in to_datetime Error reporting message (pandas-dev#47995)
* pandas-dev#16757: improvement of to_datetime errors * The exceptions from to_datetime(errors='raise') could include information about the exception * testcase updates * testcase updates * testcase updates * testcase updates
1 parent 446854a commit fa6f046

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

pandas/_libs/tslib.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ cpdef array_to_datetime(
595595
continue
596596
elif is_raise:
597597
raise ValueError(
598-
f"time data {val} doesn't match format specified"
598+
f"time data \"{val}\" at position {i} doesn't match format specified"
599599
)
600600
return values, tz_out
601601

@@ -611,7 +611,7 @@ cpdef array_to_datetime(
611611
if is_coerce:
612612
iresult[i] = NPY_NAT
613613
continue
614-
raise TypeError("invalid string coercion to datetime")
614+
raise TypeError(f"invalid string coercion to datetime for \"{val}\" at position {i}")
615615

616616
if tz is not None:
617617
seen_datetime_offset = True

pandas/_libs/tslibs/parsing.pyx

+3-3
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ def parse_datetime_string(
286286
datetime dt
287287

288288
if not _does_string_look_like_datetime(date_string):
289-
raise ValueError('Given date string not likely a datetime.')
289+
raise ValueError(f'Given date string {date_string} not likely a datetime')
290290

291291
if does_string_look_like_time(date_string):
292292
# use current datetime as default, not pass _DEFAULT_DATETIME
@@ -320,7 +320,7 @@ def parse_datetime_string(
320320
except TypeError:
321321
# following may be raised from dateutil
322322
# TypeError: 'NoneType' object is not iterable
323-
raise ValueError('Given date string not likely a datetime.')
323+
raise ValueError(f'Given date string {date_string} not likely a datetime')
324324

325325
return dt
326326

@@ -396,7 +396,7 @@ cdef parse_datetime_string_with_reso(
396396
int out_tzoffset
397397

398398
if not _does_string_look_like_datetime(date_string):
399-
raise ValueError('Given date string not likely a datetime.')
399+
raise ValueError(f'Given date string {date_string} not likely a datetime')
400400

401401
parsed, reso = _parse_delimited_date(date_string, dayfirst)
402402
if parsed is not None:

pandas/tests/scalar/period/test_period.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def test_invalid_arguments(self):
301301
with pytest.raises(ValueError, match=msg):
302302
Period(month=1)
303303

304-
msg = "Given date string not likely a datetime"
304+
msg = "Given date string -2000 not likely a datetime"
305305
with pytest.raises(ValueError, match=msg):
306306
Period("-2000", "A")
307307
msg = "day is out of range for month"

pandas/tests/tools/test_to_datetime.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ def test_datetime_invalid_scalar(self, value, format, infer):
951951
msg = (
952952
"is a bad directive in format|"
953953
"second must be in 0..59|"
954-
"Given date string not likely a datetime"
954+
f"Given date string {value} not likely a datetime"
955955
)
956956
with pytest.raises(ValueError, match=msg):
957957
to_datetime(
@@ -1003,7 +1003,7 @@ def test_datetime_invalid_index(self, values, format, infer):
10031003

10041004
msg = (
10051005
"is a bad directive in format|"
1006-
"Given date string not likely a datetime|"
1006+
f"Given date string {values[0]} not likely a datetime|"
10071007
"second must be in 0..59"
10081008
)
10091009
with pytest.raises(ValueError, match=msg):
@@ -2220,7 +2220,7 @@ def test_day_not_in_month_raise(self, cache):
22202220

22212221
@pytest.mark.parametrize("arg", ["2015-02-29", "2015-02-32", "2015-04-31"])
22222222
def test_day_not_in_month_raise_value(self, cache, arg):
2223-
msg = f"time data {arg} doesn't match format specified"
2223+
msg = f'time data "{arg}" at position 0 doesn\'t match format specified'
22242224
with pytest.raises(ValueError, match=msg):
22252225
to_datetime(arg, errors="raise", format="%Y-%m-%d", cache=cache)
22262226

0 commit comments

Comments
 (0)