Skip to content

Commit 047d32d

Browse files
DanielFEvansjorisvandenbossche
authored andcommitted
ERR: include original error message for missing required dependencies (#26665)
1 parent e0c41f7 commit 047d32d

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

doc/source/whatsnew/v0.25.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Other Enhancements
8282
- :meth:`DataFrame.query` and :meth:`DataFrame.eval` now supports quoting column names with backticks to refer to names with spaces (:issue:`6508`)
8383
- :func:`merge_asof` now gives a more clear error message when merge keys are categoricals that are not equal (:issue:`26136`)
8484
- :meth:`pandas.core.window.Rolling` supports exponential (or Poisson) window type (:issue:`21303`)
85-
-
85+
- Error message for missing required imports now includes the original ImportError's text (:issue:`23868`)
8686

8787
.. _whatsnew_0250.api_breaking:
8888

pandas/__init__.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
try:
1111
__import__(dependency)
1212
except ImportError as e:
13-
missing_dependencies.append(dependency)
13+
missing_dependencies.append((dependency, e))
1414

1515
if missing_dependencies:
16-
raise ImportError(
17-
"Missing required dependencies {0}".format(missing_dependencies))
16+
msg = "Unable to import required dependencies:"
17+
for dependency, e in missing_dependencies:
18+
msg += "\n{0}: {1}".format(dependency, str(e))
19+
raise ImportError(msg)
1820
del hard_dependencies, dependency, missing_dependencies
1921

2022
# numpy compat

pandas/tests/test_base.py

+27
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from datetime import datetime, timedelta
2+
from importlib import reload
23
from io import StringIO
34
import re
45
import sys
6+
from unittest.mock import patch
57

68
import numpy as np
79
import pytest
@@ -1341,3 +1343,28 @@ def test_to_numpy_dtype(as_series):
13411343
expected = np.array(['2000-01-01T05', '2001-01-01T05'],
13421344
dtype='M8[ns]')
13431345
tm.assert_numpy_array_equal(result, expected)
1346+
1347+
1348+
@patch("builtins.__import__")
1349+
def test_missing_required_dependency(mock_import):
1350+
def mock_import_fail(name, *args, **kwargs):
1351+
if name == "numpy":
1352+
raise ImportError("cannot import name numpy")
1353+
elif name == "pytz":
1354+
raise ImportError("cannot import name some_dependency")
1355+
elif name == "dateutil":
1356+
raise ImportError("cannot import name some_other_dependency")
1357+
else:
1358+
return __import__(name, *args, **kwargs)
1359+
1360+
mock_import.side_effect = mock_import_fail
1361+
1362+
expected_msg = (
1363+
"Unable to import required dependencies:"
1364+
"\nnumpy: cannot import name numpy"
1365+
"\npytz: cannot import name some_dependency"
1366+
"\ndateutil: cannot import name some_other_dependency"
1367+
)
1368+
1369+
with pytest.raises(ImportError, match=expected_msg):
1370+
reload(pd)

0 commit comments

Comments
 (0)