|
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 |
|
|
|
|
|
|
|
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() |
|
|