#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.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/010701952c31ac8f-2906d76c-4ecd-4a41-a81d-bcf9cf87c6b7-000000%40eu-central-1.amazonses.com.

Reply via email to