{"record":{"id":"d7e5227ab8c94dd5","repo":"pandas-dev/pandas","slug":"unsupported-type-type-values-for-arrowextensi","errorCode":null,"errorMessage":"Unsupported type '{type(values)}' for ArrowExtensionArray","messagePattern":"Unsupported type '(.+?)' for ArrowExtensionArray","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":395,"sourceCode":"\n    _pa_array: pa.ChunkedArray\n    _dtype: ArrowDtype\n    # results from calls to methods decorated with cache_readonly get added here\n    _cache: dict[str, pa.ChunkedArray]\n\n    def __init__(self, values: pa.Array | pa.ChunkedArray) -> None:\n        if not HAS_PYARROW:\n            msg = (\n                f\"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow \"\n                \"backed ArrowExtensionArray.\"\n            )\n            raise ImportError(msg)\n        if isinstance(values, pa.Array):\n            self._pa_array = pa.chunked_array([values])\n        elif isinstance(values, pa.ChunkedArray):\n            self._pa_array = values\n        else:\n            raise ValueError(\n                f\"Unsupported type '{type(values)}' for ArrowExtensionArray\"\n            )\n        self._dtype = ArrowDtype(self._pa_array.type)\n        self._cache = {}\n\n    @classmethod\n    def _from_sequence(\n        cls, scalars, *, dtype: Dtype | None = None, copy: bool = False\n    ) -> Self:\n        \"\"\"\n        Construct a new ExtensionArray from a sequence of scalars.\n        \"\"\"\n        pa_type = to_pyarrow_type(dtype)\n        pa_array = cls._box_pa_array(scalars, pa_type=pa_type, copy=copy)\n        arr = cls(pa_array)\n        return arr\n\n    @classmethod","sourceCodeStart":377,"sourceCodeEnd":413,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/arrow/array.py#L377-L413","documentation":"Raised by ArrowExtensionArray.__init__ when the `values` argument is neither a pa.Array nor a pa.ChunkedArray. The constructor only accepts already-built pyarrow arrays; any other Python object (list, numpy array, pandas array, scalar) is rejected. This is a low-level constructor guard — public construction paths go through _from_sequence which builds the pa.Array first.","triggerScenarios":"Directly instantiating ArrowExtensionArray with raw Python/numpy data: `ArrowExtensionArray([1,2,3])`, `ArrowExtensionArray(np.array([1,2]))`, `ArrowExtensionArray(pa.chunked_array(...))` works but `ArrowExtensionArray('not an array')` fails.","commonSituations":"Subclassing or directly calling the constructor instead of using _from_sequence / pd.array / pd.Series(..., dtype=ArrowDtype(...)). Passing a pa.Table, pa.RecordBatch, or a Python list by mistake.","solutions":["Use the factory: ArrowExtensionArray._from_sequence([1,2,3], dtype=ArrowDtype(pa.int64())).","Wrap raw data in pyarrow first: ArrowExtensionArray(pa.array([1,2,3], type=pa.int64())).","For public APIs prefer pd.array([...], dtype='int64[pyarrow]') or pd.Series.","If you have a pa.Table column, pull a ChunkedArray via table.column(0) before constructing."],"exampleFix":"# before\nfrom pandas.core.arrays.arrow import ArrowExtensionArray\narr = ArrowExtensionArray([1, 2, 3])  # ValueError\n# after\nimport pyarrow as pa\narr = ArrowExtensionArray(pa.array([1, 2, 3], type=pa.int64()))","handlingStrategy":"type-guard","validationCode":"import pyarrow as pa\n\ndef to_arrow_ext_array(values):\n    if isinstance(values, (pa.Array, pa.ChunkedArray)):\n        from pandas.core.arrays.arrow import ArrowExtensionArray\n        return ArrowExtensionArray(values)\n    # build via public factory\n    import pandas as pd\n    return pd.array(values, dtype=pd.ArrowDtype(pa.int64()))","typeGuard":"import pyarrow as pa\n\ndef is_pyarrow_array(x) -> bool:\n    return isinstance(x, (pa.Array, pa.ChunkedArray))","tryCatchPattern":"try:\n    arr = ArrowExtensionArray(values)\nexcept ValueError as e:\n    if 'Unsupported type' in str(e):\n        import pyarrow as pa\n        arr = ArrowExtensionArray(pa.array(values))\n    else:\n        raise","preventionTips":["Avoid calling ArrowExtensionArray() directly; use _from_sequence or pd.array.","Always wrap raw Python lists in pa.array(...) first.","Type-check inputs at API boundaries before construction."],"tags":["pyarrow","constructor","type-validation","internal-api"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}