Opened 2 days ago
Closed 8 hours ago
#36208 closed Uncategorized (invalid)
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 (2)
comment:1 by , 8 hours ago
comment:2 by , 8 hours ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
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.