Opened 10 hours ago

#36208 new Uncategorized

Python 3.12/3.13 Enum-related error but only triggered via PyCharm debug start

Reported by: Tim Richardson Owned by:
Component: Uncategorized Version: 5.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

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

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top