1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
| import pytest
|
| from pandas.errors import (
| AbstractMethodError,
| UndefinedVariableError,
| )
|
| import pandas as pd
|
|
| @pytest.mark.parametrize(
| "exc",
| [
| "AttributeConflictWarning",
| "CSSWarning",
| "CategoricalConversionWarning",
| "ClosedFileError",
| "DataError",
| "DatabaseError",
| "DtypeWarning",
| "EmptyDataError",
| "IncompatibilityWarning",
| "IndexingError",
| "InvalidColumnName",
| "InvalidComparison",
| "InvalidVersion",
| "LossySetitemError",
| "MergeError",
| "NoBufferPresent",
| "NumExprClobberingError",
| "NumbaUtilError",
| "OptionError",
| "OutOfBoundsDatetime",
| "ParserError",
| "ParserWarning",
| "PerformanceWarning",
| "PossibleDataLossError",
| "PossiblePrecisionLoss",
| "PyperclipException",
| "SettingWithCopyError",
| "SettingWithCopyWarning",
| "SpecificationError",
| "UnsortedIndexError",
| "UnsupportedFunctionCall",
| "ValueLabelTypeMismatch",
| ],
| )
| def test_exception_importable(exc):
| from pandas import errors
|
| err = getattr(errors, exc)
| assert err is not None
|
| # check that we can raise on them
|
| msg = "^$"
|
| with pytest.raises(err, match=msg):
| raise err()
|
|
| def test_catch_oob():
| from pandas import errors
|
| msg = "Cannot cast 1500-01-01 00:00:00 to unit='ns' without overflow"
| with pytest.raises(errors.OutOfBoundsDatetime, match=msg):
| pd.Timestamp("15000101").as_unit("ns")
|
|
| @pytest.mark.parametrize(
| "is_local",
| [
| True,
| False,
| ],
| )
| def test_catch_undefined_variable_error(is_local):
| variable_name = "x"
| if is_local:
| msg = f"local variable '{variable_name}' is not defined"
| else:
| msg = f"name '{variable_name}' is not defined"
|
| with pytest.raises(UndefinedVariableError, match=msg):
| raise UndefinedVariableError(variable_name, is_local)
|
|
| class Foo:
| @classmethod
| def classmethod(cls):
| raise AbstractMethodError(cls, methodtype="classmethod")
|
| @property
| def property(self):
| raise AbstractMethodError(self, methodtype="property")
|
| def method(self):
| raise AbstractMethodError(self)
|
|
| def test_AbstractMethodError_classmethod():
| xpr = "This classmethod must be defined in the concrete class Foo"
| with pytest.raises(AbstractMethodError, match=xpr):
| Foo.classmethod()
|
| xpr = "This property must be defined in the concrete class Foo"
| with pytest.raises(AbstractMethodError, match=xpr):
| Foo().property
|
| xpr = "This method must be defined in the concrete class Foo"
| with pytest.raises(AbstractMethodError, match=xpr):
| Foo().method()
|
|