Skip to content

Commit f32efa8

Browse files
committed
TST: raise exception if passed date_parser fails
1 parent f982225 commit f32efa8

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

pandas/io/tests/test_parsers.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,32 @@ def test_read_csv_parse_simple_list(self):
638638
'foo', 'bar']})
639639
assert_frame_equal(df, expected)
640640

641+
def test_parse_dates_custom_euroformat(self):
642+
from dateutil.parser import parse
643+
text = """foo,bar,baz
644+
31/01/2010,1,2
645+
01/02/2010,1,NA
646+
02/02/2010,1,2
647+
"""
648+
parser = lambda d: parse(d, dayfirst=True)
649+
df = read_csv(StringIO(text), skiprows=[0],
650+
names=['time', 'Q', 'NTU'], index_col=0,
651+
parse_dates=True, date_parser=parser,
652+
na_values=['NA'])
653+
654+
exp_index = Index([datetime(2010, 1, 31), datetime(2010, 2, 1),
655+
datetime(2010, 2, 2)], name='time')
656+
expected = DataFrame({'Q' : [1, 1, 1], 'NTU' : [2, np.nan, 2]},
657+
index=exp_index, columns=['Q', 'NTU'])
658+
assert_frame_equal(df, expected)
659+
660+
parser = lambda d: parse(d, day_first=True)
661+
self.assertRaises(Exception, read_csv,
662+
StringIO(text), skiprows=[0],
663+
names=['time', 'Q', 'NTU'], index_col=0,
664+
parse_dates=True, date_parser=parser,
665+
na_values=['NA'])
666+
641667
def test_converters_corner_with_nas(self):
642668
import StringIO
643669
import numpy as np

pandas/src/inference.pyx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -352,16 +352,22 @@ def try_parse_dates(ndarray[object] values, parser=None):
352352
return datetime.strptime(s, '%m/%d/%Y')
353353
except Exception:
354354
return s
355+
# EAFP here
356+
try:
357+
for i from 0 <= i < n:
358+
result[i] = parse_date(values[i])
359+
except Exception:
360+
# failed
361+
return values
355362
else:
356363
parse_date = parser
357364

358-
# EAFP
359-
try:
360-
for i from 0 <= i < n:
361-
result[i] = parse_date(values[i])
362-
except Exception:
363-
# failed
364-
return values
365+
try:
366+
for i from 0 <= i < n:
367+
result[i] = parse_date(values[i])
368+
except Exception:
369+
# raise if passed parser and it failed
370+
raise
365371

366372
return result
367373

0 commit comments

Comments
 (0)