[Django] #36208: Python 3.12/3.13 Enum-related error but only triggered via PyCharm debug start

6 views
Skip to first unread message

Django

unread,
Feb 22, 2025, 12:46:54 AMFeb 22
to django-...@googlegroups.com
#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.

Django

unread,
Feb 23, 2025, 3:55:57 PMFeb 23
to django-...@googlegroups.com
#36208: Python 3.12/3.13 Enum-related error but only triggered via PyCharm debug
start
--------------------------------+--------------------------------------
Reporter: Tim Richardson | Owner: (none)
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 5.1
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+--------------------------------------
Comment (by Tim Richardson):

This seems like a problem with the Pycharm debugger. It looks like the
Enum TypeError exception is copiously encountered in Django at the moment,
and the exception is trapped and essentially ignored (I think). But
certain break point locations and the debugger's runtime behaviour are
somehow stopping the exception handling. I can proceed with debugging by
clearing all breakpoints, I don't yet know which ones cause the problem.

However, not a Django bug.
--
Ticket URL: <https://code.djangoproject.com/ticket/36208#comment:1>

Django

unread,
Feb 23, 2025, 3:56:38 PMFeb 23
to django-...@googlegroups.com
#36208: Python 3.12/3.13 Enum-related error but only triggered via PyCharm debug
start
--------------------------------+--------------------------------------
Reporter: Tim Richardson | Owner: (none)
Type: Uncategorized | Status: closed
Component: Uncategorized | Version: 5.1
Severity: Normal | Resolution: invalid
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+--------------------------------------
Changes (by Tim Richardson):

* resolution: => invalid
* status: new => closed

--
Ticket URL: <https://code.djangoproject.com/ticket/36208#comment:2>
Reply all
Reply to author
Forward
0 new messages