yappi
yappi copied to clipboard
Yappi 3.12 `AttributeError: _mock_methods` when using MagicMock
trafficstars
My program fails when trying to profile using yappi through 3.12 (works fine with cProfile)
I'm seeing this when I use yappi in combination with unittest.mock and Python 3.12. Removing any of those three elements fixes the issue. Here's a repro:
from unittest import mock
import yappi
if __name__ == "__main__":
yappi.start()
mock.MagicMock()
yappi.stop()
Traceback:
Traceback (most recent call last):
File "/Users/santorella/miniconda3/envs/ax_312_test/lib/python3.12/unittest/mock.py", line 656, in __getattr__
elif self._mock_methods is not None:
^^^^^^^^^^^^^^^^^^
File "/Users/santorella/miniconda3/envs/ax_312_test/lib/python3.12/unittest/mock.py", line 655, in __getattr__
raise AttributeError(name)
AttributeError: _mock_methods
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "[...]/test_debug.py", line 15, in <module>
mock.MagicMock()
File "/Users/santorella/miniconda3/envs/ax_312_test/lib/python3.12/unittest/mock.py", line 2119, in __init__
def __init__(self, /, *args, **kw):
SystemError: <sys.legacy_event_handler object at 0x1010a1370> returned a result with an exception set
@sumerc I see an AttributeError as well on Python 3.12.
It is easy to reproduce: pip install the ruamel.yaml and yappi libraries, then create a file with this code:
from ruamel.yaml import YAML
print("hi")
Profile on the command line with yappi file.py. It will fail with an AttributeError. However, if you run the file directly, it will work.
Traceback:
Traceback (most recent call last):
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/util.py", line 38, in __getattribute__
lazy_self = object.__getattribute__(self, 'lazy_self')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'LazyEval' object has no attribute 'lazy_self'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/mcarans/Code/VirtualEnvs/scratch/bin/yappi", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/yappi.py", line 1500, in main
exec(
File "yappi_ruamel_fail.py", line 1, in <module>
from ruamel.yaml import YAML
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/__init__.py", line 51, in <module>
from .cyaml import * # NOQA
^^^^^^^^^^^^^^^^^^^^
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/cyaml.py", line 4, in <module>
from _ruamel_yaml import CParser, CEmitter # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "_ruamel_yaml.pyx", line 18, in init ruamel.yaml.clib._ruamel_yaml
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/reader.py", line 26, in <module>
from ruamel.yaml.util import RegExp
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/util.py", line 49, in <module>
timestamp_regexp = RegExp(
^^^^^^^
File "/home/mcarans/Code/VirtualEnvs/scratch/lib/python3.12/site-packages/ruamel/yaml/util.py", line 29, in __init__
def __init__(self, func: Callable[..., Any], *args: Any, **kwargs: Any) -> None:
SystemError: <sys.legacy_event_handler object at 0x74ff20e77f10> returned a result with an exception set
I will look into this!