Skip to content

Commit 20c23b7

Browse files
committed
matching errors
1 parent 5988477 commit 20c23b7

File tree

2 files changed

+28
-22
lines changed

2 files changed

+28
-22
lines changed

pandas/core/arrays/timedeltas.py

+24-18
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
from . import datetimelike as dtl
3535

36+
_BAD_DTYPE = "dtype {dtype} cannot be converted to timedelta64[ns]"
37+
3638

3739
def _to_m8(key):
3840
"""
@@ -147,15 +149,7 @@ def __init__(self, values, dtype=_TD_DTYPE, freq=None, copy=False):
147149
values = values._values
148150

149151
if isinstance(values, type(self)):
150-
if freq is None:
151-
freq = values.freq
152-
elif freq and values.freq:
153-
freq = to_offset(freq)
154-
freq, freq_infer = dtl.validate_inferred_freq(
155-
freq, values.freq,
156-
freq_infer=False
157-
)
158-
values = values._data
152+
values, freq, freq_infer = extract_values_freq(values, freq)
159153

160154
if not isinstance(values, np.ndarray):
161155
msg = (
@@ -171,18 +165,15 @@ def __init__(self, values, dtype=_TD_DTYPE, freq=None, copy=False):
171165
values = values.view(_TD_DTYPE)
172166

173167
if values.dtype != _TD_DTYPE:
174-
msg = (
175-
"The dtype of 'values' is incorrect. Must be "
176-
"'timedelta64[ns]'. Got '{}' instead."
177-
)
178-
raise ValueError(msg.format(values.dtype))
168+
raise TypeError(_BAD_DTYPE.format(dtype=values.dtype))
179169

180-
dtype_msg = "'dtype' must be 'timedelta64[ns]'. Got '{}' instead."
181170
try:
182-
if dtype != _TD_DTYPE:
183-
raise ValueError(dtype_msg.format(dtype))
171+
dtype_mismatch = dtype != _TD_DTYPE
184172
except TypeError:
185-
raise ValueError(dtype_msg.format(dtype))
173+
raise TypeError(_BAD_DTYPE.format(dtype=dtype))
174+
else:
175+
if dtype_mismatch:
176+
raise TypeError(_BAD_DTYPE.format(dtype=dtype))
186177

187178
if freq == "infer":
188179
msg = (
@@ -1017,3 +1008,18 @@ def _generate_regular_range(start, end, periods, offset):
10171008

10181009
data = np.arange(b, e, stride, dtype=np.int64)
10191010
return data
1011+
1012+
1013+
def extract_values_freq(arr, freq):
1014+
# type: (TimedeltaArray, Offset) -> Tuple[ndarray, Offset, bool]
1015+
freq_infer = False
1016+
if freq is None:
1017+
freq = arr.freq
1018+
elif freq and arr.freq:
1019+
freq = to_offset(freq)
1020+
freq, freq_infer = dtl.validate_inferred_freq(
1021+
freq, arr.freq,
1022+
freq_infer=False
1023+
)
1024+
values = arr._data
1025+
return values, freq, freq_infer

pandas/tests/arrays/test_timedeltas.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ def test_non_array_raises(self):
1414
TimedeltaArray([1, 2, 3])
1515

1616
def test_other_type_raises(self):
17-
with pytest.raises(ValueError,
18-
match="The dtype of 'values' is incorrect.*bool"):
17+
with pytest.raises(TypeError,
18+
match="dtype bool cannot be converted"):
1919
TimedeltaArray(np.array([1, 2, 3], dtype='bool'))
2020

2121
def test_incorrect_dtype_raises(self):
22-
with pytest.raises(ValueError, match=".dtype. must be .timedelta64."):
22+
with pytest.raises(TypeError, match="dtype category"):
2323
TimedeltaArray(np.array([1, 2, 3], dtype='i8'), dtype='category')
2424

25-
with pytest.raises(ValueError, match=".dtype. must be .timedelta64."):
25+
with pytest.raises(TypeError, match="dtype int"):
2626
TimedeltaArray(np.array([1, 2, 3], dtype='i8'),
2727
dtype=np.dtype(int))
2828

0 commit comments

Comments
 (0)