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