| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | import pytestfrom 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()
 |