You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
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()
 |