web-dev-qa-db-ja.com

Python:Django TypeError:object()はパラメーターを取りません

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'

どんな助けでもいただければ幸いです。

8
Ram

このエラーは、ミドルウェアリストに古いスタイルのミドルウェアがあることを示しています。古いスタイルのミドルウェアはインスタンス化時に引数を受け取りませんでしたが、新しいスタイルのミドルウェアはハンドラーを受け取ります。

さて、あなたの設定によれば、Django以外のミドルウェアはホワイトノイズだけですが、それをコメントアウトした後もエラーが続くとあなたは言います。

何が起こっているのかを理解するのに役立ついくつかの提案があります:

  • コメントしたように、ブレークポイントまたはprintステートメントをDjangoソースに追加して、問題の原因となっているミドルウェアを特定します。

  • 編集している設定ファイルが実際に使用されているものであることを確認してください。

  • Python Shellを使用して、MIDDLEWARE設定の実際の値を調べます。

    $ python manage.py Shell
    >>> from Django.conf import settings
    >>> settings.MIDDLEWARE
    ...
    
9
Daniel Hepper

あなたにこれを試してみてください/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()はパラメーターを取りません

4
JPG