Djangoアプリケーションを1.xから2.1に移植していて、「TypeError:object()はパラメーターを取りません」というエラーでスタックしました。問題を解決しようとしています。かなり長い間ですが、オンラインでデバッグして検索した数日後でも手がかりは得られませんでした
インストールされているアプリ:
INSTALLED_APPS = [
'Django.contrib.admin',
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.messages',
'Django.contrib.staticfiles',
'Django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.github',
'timezone_field',
'axes',
'humans',
'boxes',
'pages',
]
ミドルウェア設定:
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
'Django.contrib.sessions.middleware.SessionMiddleware',
'Django.middleware.locale.LocaleMiddleware',
'Django.middleware.common.CommonMiddleware',
'Django.middleware.csrf.CsrfViewMiddleware',
'Django.contrib.auth.middleware.AuthenticationMiddleware',
'Django.contrib.messages.middleware.MessageMiddleware',
'Django.middleware.clickjacking.XFrameOptionsMiddleware',
'Django.middleware.security.SecurityMiddleware',
]
インデントに問題はありません、
セロリバージョン:4.2.1
レイヴンバージョン:6.9.0
Djangoバージョン:2.1
これが私のwsgi.pyです
import os
from raven.contrib.Django.raven_compat.middleware.wsgi import Sentry
from Django.core.wsgi import get_wsgi_application
os.environ.setdefault("Django_SETTINGS_MODULE", "settings")
application=Sentry(get_wsgi_application())
これはエラーログからの抜粋です
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/app/wsgi.py", line 16, in <module>
application=Sentry(get_wsgi_application())
File "/usr/local/lib/python3.5/dist-packages/Django/core/wsgi.py", line 13, in get_wsgi_application
return WSGIHandler()
File "/usr/local/lib/python3.5/dist-packages/Django/core/handlers/wsgi.py", line 136, in __init__
self.load_middleware()
File "/usr/local/lib/python3.5/dist-packages/Django/core/handlers/base.py", line 36, in load_middleware
mw_instance = middleware(handler)
TypeError: object() takes no parameters
CustomSentry使用後のエラー:
in <module>
application = CustomSentry(get_wsgi_application())
File "/usr/local/lib/python3.5/dist-packages/Django/core/wsgi.py", line 13, in get_wsgi_application
return WSGIHandler()
File "/usr/local/lib/python3.5/dist-packages/Django/core/handlers/wsgi.py", line 136, in __init__
self.load_middleware()
File "/usr/local/lib/python3.5/dist-packages/Django/core/handlers/base.py", line 36, in load_middleware
mw_instance = middleware(handler)
TypeError: object() takes no parameters
ExceptionMiddlewareを使用して例外をキャッチしようとしましたが、次のエラーが発生します。
application = CustomSentry(get_wsgi_application())
File "/usr/local/lib/python3.5/dist-packages/Django/utils/deprecation.py", line 85, in __init__
super().__init__()
TypeError: __init__() missing 1 required positional argument: 'application'
どんな助けでもいただければ幸いです。
このエラーは、ミドルウェアリストに古いスタイルのミドルウェアがあることを示しています。古いスタイルのミドルウェアはインスタンス化時に引数を受け取りませんでしたが、新しいスタイルのミドルウェアはハンドラーを受け取ります。
さて、あなたの設定によれば、Django以外のミドルウェアはホワイトノイズだけですが、それをコメントアウトした後もエラーが続くとあなたは言います。
何が起こっているのかを理解するのに役立ついくつかの提案があります:
コメントしたように、ブレークポイントまたはprintステートメントをDjangoソースに追加して、問題の原因となっているミドルウェアを特定します。
編集している設定ファイルが実際に使用されているものであることを確認してください。
Python Shellを使用して、MIDDLEWARE
設定の実際の値を調べます。
$ python manage.py Shell
>>> from Django.conf import settings
>>> settings.MIDDLEWARE
...
あなたにこれを試してみてください/app/wsgi.py
モジュール、
import os
from raven.contrib.Django.raven_compat.middleware.wsgi import Sentry
from Django.core.wsgi import get_wsgi_application
from Django.utils.deprecation import MiddlewareMixin
class CustomSentry(MiddlewareMixin, Sentry):
pass
os.environ.setdefault("Django_SETTINGS_MODULE", "settings")
application = CustomSentry(get_wsgi_application())
参照
1。 object()はDjango 1.1 でパラメータを取りません
2。 Django例外ミドルウェア:TypeError:object()はパラメーターを取りません