-
- Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Description
Using the latest version of pytest against this minimal reproducer produces an error in collection:
draft $ cat test.py from urllib.request import HTTPError import pytest @pytest.mark.parametrize( 'error', [HTTPError('url', 400, 'httperror', {}, None)]) def test_something(error): pass draft $ pip-run pytest -- -m pytest test.py Collecting pytest Using cached pytest-7.1.2-py3-none-any.whl (297 kB) Collecting pluggy<2.0,>=0.12 Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB) Collecting py>=1.8.2 Using cached py-1.11.0-py2.py3-none-any.whl (98 kB) Collecting tomli>=1.0.0 Using cached tomli-2.0.1-py3-none-any.whl (12 kB) Collecting iniconfig Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB) Collecting attrs>=19.2.0 Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB) Collecting packaging Using cached packaging-21.3-py3-none-any.whl (40 kB) Collecting pyparsing!=3.0.5,>=2.0.2 Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB) Installing collected packages: iniconfig, tomli, pyparsing, py, pluggy, attrs, packaging, pytest Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-21.3 pluggy-1.0.0 py-1.11.0 pyparsing-3.0.9 pytest-7.1.2 tomli-2.0.1 =============================================================================== test session starts =============================================================================== platform darwin -- Python 3.10.5, pytest-7.1.2, pluggy-1.0.0 rootdir: /Users/jaraco/draft collected 0 items / 1 error ===================================================================================== ERRORS ====================================================================================== ____________________________________________________________________________ ERROR collecting test.py _____________________________________________________________________________ /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/pluggy/_hooks.py:265: in __call__ return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/pluggy/_manager.py:80: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:262: in pytest_pycollect_makeitem return list(collector._genfunctions(name, obj)) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:489: in _genfunctions self.ihook.pytest_generate_tests.call_extra(methods, dict(metafunc=metafunc)) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/pluggy/_hooks.py:292: in call_extra return self(**kwargs) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/pluggy/_hooks.py:265: in __call__ return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/pluggy/_manager.py:80: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:148: in pytest_generate_tests metafunc.parametrize(*marker.args, **marker.kwargs, _param_mark=marker) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:1304: in parametrize ids = self._resolve_parameter_set_ids( /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:1374: in _resolve_parameter_set_ids return id_maker.make_unique_parameterset_ids() /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:966: in make_unique_parameterset_ids resolved_ids = list(self._resolve_ids()) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:991: in _resolve_ids yield "-".join( /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:992: in <genexpr> self._idval(val, argname, idx) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:1004: in _idval idval = self._idval_from_value(val) /var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-run-7rkih960/_pytest/python.py:1051: in _idval_from_value elif isinstance(getattr(val, "__name__", None), str): /opt/homebrew/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tempfile.py:477: in __getattr__ file = self.__dict__['file'] E KeyError: 'file' ============================================================================= short test summary info ============================================================================= ERROR test.py - KeyError: 'file' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ================================================================================ 1 error in 0.11s ================================================================================= The same error can be elicited by trying to get the __name__ property of an HTTPError:
>>> import urllib.request >>> urllib.request.HTTPError().__name__ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __init__() missing 5 required positional arguments: 'url', 'code', 'msg', 'hdrs', and 'fp' >>> urllib.request.HTTPError('url', 400, 'httperror', {}, None).__name__ Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/opt/homebrew/Cellar/python@3.9/3.9.13_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tempfile.py", line 472, in __getattr__ file = self.__dict__['file'] KeyError: 'file' I'm not sure if there's anything that can be done about this situation. In the code where I encountered it, I've decided to pass the parameter as a string and then eval it inside the test, a workaround to be sure.
Metadata
Metadata
Assignees
Labels
No labels