#36208: Python 3.12/3.13 Enum-related error but only triggered via PyCharm debug
start
--------------------------------+-----------------------------------------
Reporter: Tim Richardson | Type: Uncategorized
Status: new | Component: Uncategorized
Version: 5.1 | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+-----------------------------------------
This is with Django 5.1.6
When using python 3.12 or 3.13, starting runserver via pycharm's debugger
is triggering this code path and error.
I don't know if this is Django problem, but the stack trace is deep in
Django code. The debugger triggers a code path which is somehow unusual.
This problem first occurred about a week ago. I can not reproduce this
problem is a simple Django project. On the other hand, I also can not find
via git bisect when this problem was introduced by a change in my code. It
looks like a confluence of circumstances.
Reverting to python 3.11 avoids the problem.
Although finding what I may have done to cause this has eluded me, there
is actually a real error trace:
{{{
Connected to pydev debugger (build 243.24978.54)
django_api_sync_web | Traceback (most recent call last):
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/__init__.py", line 394, in execute
django_api_sync_web | autoreload.check_errors(django.setup)()
django_api_sync_web | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/utils/autoreload.py", line 64, in wrapper
django_api_sync_web | fn(*args, **kwargs)
django_api_sync_web | ~~^^^^^^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/__init__.py", line 16, in setup
django_api_sync_web | from django.urls import set_script_prefix
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/__init__.py", line 1, in <module>
django_api_sync_web | from .base import (
django_api_sync_web | ...<11 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/base.py", line 8, in <module>
django_api_sync_web | from .exceptions import NoReverseMatch,
Resolver404
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/exceptions.py", line 1, in <module>
django_api_sync_web | from django.http import Http404
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/http/__init__.py", line 9, in <module>
django_api_sync_web | from django.http.response import (
django_api_sync_web | ...<16 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/http/response.py", line 19, in <module>
django_api_sync_web | from django.core.serializers.json import
DjangoJSONEncoder
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/serializers/__init__.py", line 23, in <module>
django_api_sync_web | from django.core.serializers.base import
SerializerDoesNotExist
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/serializers/base.py", line 8, in <module>
django_api_sync_web | from django.db import models
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/__init__.py", line 3, in <module>
django_api_sync_web | from django.db.models.aggregates import * #
NOQA
django_api_sync_web | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/aggregates.py", line 6, in <module>
django_api_sync_web | from django.db.models.expressions import Case,
Func, Star, Value, When
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/expressions.py", line 853, in <module>
django_api_sync_web | class TemporalSubtraction(CombinedExpression):
django_api_sync_web | ...<11 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/expressions.py", line 854, in
TemporalSubtraction
django_api_sync_web | output_field = fields.DurationField()
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/fields/__init__.py", line 228, in __init__
django_api_sync_web | self.choices = choices
django_api_sync_web | ^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/fields/__init__.py", line 551, in choices
django_api_sync_web | self._choices = normalize_choices(value)
django_api_sync_web | ~~~~~~~~~~~~~~~~~^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/utils/choices.py", line 74, in normalize_choices
django_api_sync_web | from django.db.models.enums import ChoicesType
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/enums.py", line 101, in <module>
django_api_sync_web | class IntegerChoices(Choices, IntEnum):
django_api_sync_web | ...<2 lines>...
django_api_sync_web | pass
django_api_sync_web | File "/usr/local/lib/python3.13/enum.py", line
487, in __prepare__
django_api_sync_web | metacls._check_for_existing_members_(cls,
bases)
django_api_sync_web |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/enum.py", line
937, in _check_for_existing_members_
django_api_sync_web | raise TypeError(
django_api_sync_web | ...<2 lines>...
django_api_sync_web | )
django_api_sync_web | TypeError: <enum 'IntegerChoices'> cannot extend
<enum 'Choices'>
django_api_sync_web |
django_api_sync_web | During handling of the above exception, another
exception occurred:
django_api_sync_web |
django_api_sync_web | Traceback (most recent call last):
django_api_sync_web | File "/opt/.pycharm_helpers/pydev/pydevd.py",
line 1570, in _exec
django_api_sync_web | pydev_imports.execfile(file, globals, locals)
# execute the script
django_api_sync_web | ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
django_api_sync_web | File
"/opt/.pycharm_helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in
execfile
django_api_sync_web | exec(compile(contents+"\n", file, 'exec'),
glob, loc)
django_api_sync_web |
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django_api_sync_web | File "manage.py", line 22, in <module>
django_api_sync_web | main()
django_api_sync_web | ~~~~^^
django_api_sync_web | File "manage.py", line 18, in main
django_api_sync_web | execute_from_command_line(sys.argv)
django_api_sync_web | ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/__init__.py", line 442, in
execute_from_command_line
django_api_sync_web | utility.execute()
django_api_sync_web | ~~~~~~~~~~~~~~~^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/__init__.py", line 407, in execute
django_api_sync_web | _parser =
self.fetch_command("runserver").create_parser(
django_api_sync_web | ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/__init__.py", line 275, in fetch_command
django_api_sync_web | klass = load_command_class(app_name,
subcommand)
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/__init__.py", line 48, in
load_command_class
django_api_sync_web | module =
import_module("%s.management.commands.%s" % (app_name, name))
django_api_sync_web | File
"/usr/local/lib/python3.13/importlib/__init__.py", line 88, in
import_module
django_api_sync_web | return _bootstrap._gcd_import(name[level:],
package, level)
django_api_sync_web |
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django_api_sync_web | File "<frozen importlib._bootstrap>", line 1387,
in _gcd_import
django_api_sync_web | File "<frozen importlib._bootstrap>", line 1360,
in _find_and_load
django_api_sync_web | File "<frozen importlib._bootstrap>", line 1331,
in _find_and_load_unlocked
django_api_sync_web | File "<frozen importlib._bootstrap>", line 935,
in _load_unlocked
django_api_sync_web | File "<frozen importlib._bootstrap_external>",
line 1026, in exec_module
django_api_sync_web | File "<frozen importlib._bootstrap>", line 488,
in _call_with_frames_removed
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/management/commands/runserver.py", line 10, in
<module>
django_api_sync_web | from django.core.servers.basehttp import
WSGIServer, get_internal_wsgi_application, run
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/servers/basehttp.py", line 18, in <module>
django_api_sync_web | from django.core.handlers.wsgi import
LimitedStream
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/handlers/wsgi.py", line 5, in <module>
django_api_sync_web | from django.core.handlers import base
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/handlers/base.py", line 11, in <module>
django_api_sync_web | from django.urls import get_resolver,
set_urlconf
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/__init__.py", line 1, in <module>
django_api_sync_web | from .base import (
django_api_sync_web | ...<11 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/base.py", line 8, in <module>
django_api_sync_web | from .exceptions import NoReverseMatch,
Resolver404
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/urls/exceptions.py", line 1, in <module>
django_api_sync_web | from django.http import Http404
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/http/__init__.py", line 9, in <module>
django_api_sync_web | from django.http.response import (
django_api_sync_web | ...<16 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/http/response.py", line 19, in <module>
django_api_sync_web | from django.core.serializers.json import
DjangoJSONEncoder
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/serializers/__init__.py", line 23, in <module>
django_api_sync_web | from django.core.serializers.base import
SerializerDoesNotExist
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/core/serializers/base.py", line 8, in <module>
django_api_sync_web | from django.db import models
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/__init__.py", line 3, in <module>
django_api_sync_web | from django.db.models.aggregates import * #
NOQA
django_api_sync_web | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/aggregates.py", line 6, in <module>
django_api_sync_web | from django.db.models.expressions import Case,
Func, Star, Value, When
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/expressions.py", line 853, in <module>
django_api_sync_web | class TemporalSubtraction(CombinedExpression):
django_api_sync_web | ...<11 lines>...
django_api_sync_web | )
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/expressions.py", line 854, in
TemporalSubtraction
django_api_sync_web | output_field = fields.DurationField()
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/fields/__init__.py", line 228, in __init__
django_api_sync_web | self.choices = choices
django_api_sync_web | ^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/fields/__init__.py", line 551, in choices
django_api_sync_web | self._choices = normalize_choices(value)
django_api_sync_web | ~~~~~~~~~~~~~~~~~^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/utils/choices.py", line 74, in normalize_choices
django_api_sync_web | from django.db.models.enums import ChoicesType
django_api_sync_web | File "/usr/local/lib/python3.13/site-
packages/django/db/models/enums.py", line 101, in <module>
django_api_sync_web | class IntegerChoices(Choices, IntEnum):
django_api_sync_web | ...<2 lines>...
django_api_sync_web | pass
django_api_sync_web | File "/usr/local/lib/python3.13/enum.py", line
487, in __prepare__
django_api_sync_web | metacls._check_for_existing_members_(cls,
bases)
django_api_sync_web |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
django_api_sync_web | File "/usr/local/lib/python3.13/enum.py", line
937, in _check_for_existing_members_
django_api_sync_web | raise TypeError(
django_api_sync_web | ...<2 lines>...
django_api_sync_web | )
django_api_sync_web | TypeError: <enum 'IntegerChoices'> cannot extend
<enum 'Choices'>
Aborting on container exit...
Container django_api_sync_web Stopping
Container django_api_sync_web Stopped
exit status 1
}}}
--
Ticket URL: <
https://code.djangoproject.com/ticket/36208>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.