[issue44414] from __future__ import annotations breaks profiler's handling of dataclasses

2021-06-13 Thread Jelle Zijlstra


Change by Jelle Zijlstra :


--
nosy: +Jelle Zijlstra

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue44414] from __future__ import annotations breaks profiler's handling of dataclasses

2021-06-13 Thread James Wilcox


New submission from James Wilcox :

This program behaves differently when run under the profiler (either profile or 
cProfile) versus when run normally.

```
from __future__ import annotations  # ***
import dataclasses

@dataclasses.dataclass
class C:
x: dataclasses.InitVar[int]

def __post_init__(self, x):
print(f'hello {x}')

C(0)
```

Save this as foo.py. Then

python foo.py

prints

hello 0

but

python -m profile foo.py

results in the traceback

```
Traceback (most recent call last):
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/runpy.py", line 197, 
in _run_module_as_main
return _run_code(code, main_globals, None,
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/runpy.py", line 87, in 
_run_code
exec(code, run_globals)
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/profile.py", line 610, 
in 
main()
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/profile.py", line 599, 
in main
runctx(code, globs, None, options.outfile, options.sort)
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/profile.py", line 99, 
in runctx
return _Utils(Profile).runctx(statement, globals, locals, filename, sort)
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/profile.py", line 62, 
in runctx
prof.runctx(statement, globals, locals)
  File "/Users/jrw12/.pyenv/versions/3.9.5/lib/python3.9/profile.py", line 422, 
in runctx
exec(cmd, globals, locals)
  File "foo.py", line 11, in 
C(0)
  File "", line 4, in __init__
TypeError: __post_init__() missing 1 required positional argument: 'x'
```

A similar traceback occurs if using `-m cProfile` instead of `-m profile`.

No such traceback occurs if the `from future import __annotations__` is removed 
from the file.

Possibly related to #39442.

--
components: Library (Lib)
messages: 395762
nosy: wilcoxjay
priority: normal
severity: normal
status: open
title: from __future__ import annotations breaks profiler's handling of 
dataclasses
type: behavior
versions: Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com