diff --git a/AUTHORS b/AUTHORS index 636fe7f7b..cce84a3c6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -78,6 +78,7 @@ Kale Kundert Katarzyna Jachim Kevin Cox Lee Kamentsky +Lev Maximov Lukas Bednar Maciek Fijalkowski Maho diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 43bec4fb4..61fb9b5b3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,14 +12,20 @@ * Fix pkg_resources import error in Jython projects (`#1853`). Thanks `@raquel-ucl`_ for the PR. +* Got rid of ``AttributeError: 'Module' object has no attribute '_obj'`` exception + in Python 3 (`#1944`_). + Thanks `@axil`_ for the PR. + * .. _@philpep: https://github.com/philpep .. _@raquel-ucl: https://github.com/raquel-ucl +.. _@axil: https://github.com/axil .. _#1905: https://github.com/pytest-dev/pytest/issues/1905 .. _#1934: https://github.com/pytest-dev/pytest/issues/1934 +.. _#1944: https://github.com/pytest-dev/pytest/issues/1944 3.0.2 diff --git a/_pytest/python.py b/_pytest/python.py index 33e7cff66..f26c128ca 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -205,11 +205,10 @@ class PyobjContext(object): class PyobjMixin(PyobjContext): def obj(): def fget(self): - try: - return self._obj - except AttributeError: + obj = getattr(self, '_obj', None) + if obj is None: self._obj = obj = self._getobj() - return obj + return obj def fset(self, value): self._obj = value return property(fget, fset, None, "underlying python object") diff --git a/testing/test_assertion.py b/testing/test_assertion.py index af7e7e0fe..2d4761431 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -864,3 +864,15 @@ def test_assert_with_unicode(monkeypatch, testdir): """) result = testdir.runpytest() result.stdout.fnmatch_lines(['*AssertionError*']) + +def test_issue_1944(testdir): + testdir.makepyfile(""" + def f(): + return + + assert f() == 10 + """) + result = testdir.runpytest() + result.stdout.fnmatch_lines(["*1 error*"]) + assert "AttributeError: 'Module' object has no attribute '_obj'" not in result.stdout.str() +