2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「RecursionError: maximum recursion depth exceeded while calling a Python object」とエラーが出てしまったらこれをみよう

Posted at

目的

djangoのアプリを作成しようとして、modelの登録やsettings.pyの初期設定などどのdjangoのプロジェクトでも最初に行うようなことを行おうとして、ローカルサーバーで確認をしていこうと思った矢先、**「RecursionError: maximum recursion depth exceeded while calling a Python object」**と表示されてしまった。

状況

.test_api
├── db.sqlite3
├── manage.py
├── test_app
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py②
│   └── views.py
└── test_api
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py①
    └── wsgi.py

結論

①urls.pyのpathのinclude先を間違えていた。

実施環境

ハードウェア環境

項目 情報
OS macOS Catalina(10.15.7)
ハードウェア MacBook Air (11-inch, Early 2015)
プロセッサ 1.6 GHz デュアルコアIntel Core i5
メモリ 4 GB 1600 MHz DDR3
グラフィックス intel HD Graphics 6000 1536 MB

ソフトウェア環境

項目 情報
homebrew 3.3.8
mysql Ver 8.0.27 for macos10.15 on x86_64
python 3.8.12
django 3.1.2
anaconda 4.10.1
pip 21.2.4

経緯

djangoのアプリを作成しようとして、modelの登録やsettings.pyの初期設定などどのdjangoのプロジェクトでも最初に行うようなことを行おうとして、ローカルサーバーで確認をしていこうと思った矢先、**「RecursionError: maximum recursion depth exceeded while calling a Python object」**と表示されてしまった。

原因究明

「RecursionError: maximum recursion depth exceeded while calling a Python object」
ちゃんとエラー文を読んでみると、「Pythonオブジェクトの呼び出し中に最大再帰深度を超えました」→再帰しすぎです。
ということだった。

「再帰関数なんてどこにも使ってない気がするんだけどな、、」と追記したファイルを漁っていく。

解決

①urls.pyを見てみると、下記のようなコードになっていた。

①urls.py

urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test_api/', include('test_api.urls')),
]

これではtest_apiのurls.pyがtest_apiのurls.pyを呼ぶことになっていて、やはりエラー通り永遠に再帰してしまうことになってしまう。
ここを

urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 修正前 path('test_api/', include('test_api.urls')),
    path('test_app/', include('test_app.urls')),
]

このように変更すれば、解決。

こんなバカなことするなと思う人が大半かと思うが、意外と間違えてこのように実装して焦る人もいるのではないかと思う。気をつけよう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?