-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
It seems, such bug appeared after 4b222c9
Suppose we have initialized patch, than call start more than once and than call stop more than once:
>>> from unittest import mock
... class Foo:
... bar = None
... patch = mock.patch.object(Foo, 'bar', 'x')
>>> patch.start()
'x'
>>> patch.start()
'x'
>>> patch.stop()
False
>>> patch.stop()
Traceback (most recent call last):
File "...", line ..., in runcode
coro = func()
File "<input>", line 1, in <module>
File "/usr/lib/python3.8/unittest/mock.py", line 1542, in stop
return self.__exit__(None, None, None)
File "/usr/lib/python3.8/unittest/mock.py", line 1508, in __exit__
if self.is_local and self.temp_original is not DEFAULT:
AttributeError: '_patch' object has no attribute 'is_local'
But if we call start only once, multiple stops won't cause such error.
For a first glance it is due to stop excepting ValueError on removing patch from _active_patches and if ValueError was not raised it proceeds assuming patch have attribute is_local.
Your environment
- CPython versions tested on: Python 3.8
- Operating system: Ubuntu
- I think error exists in newer versions too
Linked PRs
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
Done