【问题标题】:Function looking for 3 arguments but only 2 given. Not sure where the issue is函数寻找 3 个参数,但只给出了 2 个。不确定问题出在哪里
【发布时间】:2019-05-21 07:39:03
【问题描述】:

当我尝试解析 django 项目中的链接时,我遇到了错误页面。它告诉我函数 find_module() 需要 3 个参数,但只提供了 2 个。现在我明白这意味着什么,但我找不到错误的根源。回溯指向一个视图,但我没有看到代码有任何问题。

这是回溯:

    Environment:


Request Method: GET
Request URL: https://0.0.0.0/ai_stats/dash/development/

Django Version: 1.3.1
Python Version: 2.7.5
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'apps.minisar',
 'apps.mock',
 'apps.actional',
 'apps.ai_stats',
 'apps.health',
 'apps.soap',
 'apps.directentry',
 'apps.toys',
 'apps.solutions']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/app/gaic/apps/ai_stats/views.py" in dashboard
  26.     return render_to_response('ai_stats/dashboard.html', locals())
File "/usr/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  181.         t = get_template(template_name)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in get_template
  157.     template, origin = find_template(template_name)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in find_template
  134.             source, display_name = loader(name, dirs)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in __call__
  42.         return self.load_template(template_name, template_dirs)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in load_template
  48.             template = get_template_from_string(source, origin, template_name)
File "/usr/lib/python2.7/site-packages/django/template/loader.py" in get_template_from_string
  168.     return Template(source, origin, name)
File "/usr/lib/python2.7/site-packages/django/template/base.py" in __init__
  108.         self.nodelist = compile_string(template_string, origin)
File "/usr/lib/python2.7/site-packages/django/template/base.py" in compile_string
  136.     return parser.parse()
File "/usr/lib/python2.7/site-packages/django/template/base.py" in parse
  239.                     compiled_result = compile_func(self, token)
File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in do_extends
  214.     nodelist = parser.parse()
File "/usr/lib/python2.7/site-packages/django/template/base.py" in parse
  239.                     compiled_result = compile_func(self, token)
File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in load
  1050.                 lib = get_library(taglib)
File "/usr/lib/python2.7/site-packages/django/template/base.py" in get_library
  1007.             lib = import_library(taglib_module)
File "/usr/lib/python2.7/site-packages/django/template/base.py" in import_library
  959.         if not module_has_submodule(app_module, taglib):
File "/usr/lib/python2.7/site-packages/django/utils/module_loading.py" in module_has_submodule
  15.         if finder.find_module(name):

Exception Type: TypeError at /ai_stats/dash/development/
Exception Value: find_module() takes exactly 3 arguments (2 given)

及其引用的views.py文件:

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

import ai2

import logging
logging.basicConfig()
log = logging.getLogger(__name__)


def index(request):
    # ai2.refresh_cache()
    return render_to_response('ai_stats/index.html', locals())
    # return HttpResponseRedirect(reverse('apps.ai_stats.views.dashboard', kwargs={'env':ai2.PROD}))


def dashboard(request, env):
    ai2.refresh_cache()
    # env = ai2.PROD
    mf_error, mf_data, _ = ai2.AIStats().data_for_chart('most_failures', env=env)
    mc_error, mc_data, _ = ai2.AIStats().data_for_chart('most_calls', env=env)
    wp_error, wp_data, _ = ai2.AIStats().data_for_chart('worst_performing', env=env)
    error = (mf_error or '') + (mc_error or '') + (wp_error or '')
    cache_timestamp = ai2.data_cache['timestamp']
    return render_to_response('ai_stats/dashboard.html', locals())


def drill(request, env, chart):
    # env = ai2.PROD
    row_limit = int(request.GET.get('limit', 100))
    error, data, _ = ai2.AIStats().data_for_chart(chart, env=env, limit=row_limit)
    cache_timestamp = ai2.data_cache['timestamp']
    return render_to_response('ai_stats/drill_%s.html' % chart, locals())


def dash_data(request, env, chart):
    # env = ai2.PROD
    error, data, chart_type = ai2.AIStats().data_for_chart(chart, env=env, params=request.GET)
    r = render_to_response('ai_stats/%s.xml' % chart, locals())
    if chart_type == ai2.GRAPH_CHART:
        r['Content-Type'] = 'text/xml'
    return r


def pop(request, env, chart):
    pop_template = 'pop_mtd'
    if chart == 'all_mtd':
        pop_template = 'pop_all'
    ops_chart = '%s_ops' % chart
    return render_to_response('ai_stats/' + pop_template + '.html', locals())

还有 urls.py:

import os
from django.conf.urls.defaults import *
from django.conf import settings

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    url(r'^media/(?P<path>.*)$',  'django.views.static.serve', {'document_root': os.path.join(settings.DJANGO_PROJECT_ROOT, 'ai_stats/media')}),
    url(r'^$', 'apps.ai_stats.views.index', name='index'),
    url(r'^dash$', 'apps.ai_stats.views.index', name='index'),
    url(r'^dash/(?P<env>(production|certification|uat|integration|development))/$', 'apps.ai_stats.views.dashboard'),
    url(r'^dash/(?P<env>(production|certification|uat|integration|development))/drill/(?P<chart>[a-z_]+)/$', 'apps.ai_stats.views.drill'),
    url(r'^dash/(?P<env>(production|certification|uat|integration|development))/pop/(?P<chart>[a-z_]+)/$', 'apps.ai_stats.views.pop'),
    url(r'^dash/(?P<env>(production|certification|uat|integration|development))/(?P<chart>[a-z_]+)/$', 'apps.ai_stats.views.dash_data'),

【问题讨论】:

    标签: python django


    【解决方案1】:

    sys.meta_path 中有一个查找器具有错误的方法签名。打开一个外壳,对其进行迭代以确定它是哪个。查找器可能是用 python 3 而不是 python 2 编写的,后者没有 find_module 的可选 path 参数。

    您的问题的答案是卸载该软件包,或者(我建议)将项目的依赖项(包括 Django)更新到最新版本。以及升级到 python 3(如果可以的话)。显然,第二个选择会更加麻烦,但是当您坚持使用未维护的 Django 版本时,您只会遇到更多此类问题。

    Python 3 find_module

    Python 2 find_module

    【讨论】:

    • 谢谢。升级到最新版本的 django/python 是我的最终目标,但是我在这方面时间紧迫,而且我的经验有限。我们有这个应用程序在我们的托管团队非常想停用的服务器上运行。该应用程序太旧了,它实际上在生产环境中的 django 1.0.3 和 python 2.5 上运行。我现在的目标是让它在新的 RHEL7 服务器上运行,这样他们就可以分解旧的了。
    • 另外,你能提供更多关于你的第一段的细节吗?我在哪里可以找到 sys.meta_path 以及我到底要寻找什么?
    • 查看django/utils/module_loading.py中django的源代码,了解方法module_has_submodule。您会找到引发错误的行。 sys.meta_info 来自内置的sys。它是使用import sys 导入的。关于 django 1.0.3 和 python 2.5,只需从头开始并重建它。启动一个新的生产服务器,并在转换时咬紧牙关 DNS 传播停机时间。这对您来说会更快、更轻松。
    • 所以除了升级 django 版本之外,我能做些什么来解决这个错误?我试图让它在 1.3.1 和 python 2.7 上工作,即使 django 没有接近受支持的版本,它们至少应该是兼容的。
    • 除了我之前说的和删除有问题的包之外,我想不出别的了。对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-09-21
    • 2019-07-19
    • 2021-02-02
    • 2020-02-07
    • 2017-03-14
    • 2014-09-07
    相关资源
    最近更新 更多