【问题标题】:Python DJANGO Error IndexError at / list index out of rangePython DJANGO Error IndexError at / list index out of range
【发布时间】:2018-02-08 22:28:46
【问题描述】:

我是 python 新手。尝试使用 django 创建一个简单的应用程序。我正面临这一行“ndim = mobjs [0].ndim”的索引超出范围异常。任何帮助将不胜感激

错误

\File "/home/anthra/server_movierecsys/books_recsys_app/views.py", line 66, in home
ndim = mobjs[0].ndim

views.py

def home(request):
context={}
if request.method == 'POST':
    post_data = request.POST
    data = {}
    data = post_data.get('data', None)
    if data:
        return redirect('%s?%s' % (reverse('books_recsys_app.views.home'),
                            urllib.urlencode({'q': data})))
elif request.method == 'GET':
    get_data = request.GET
    data = get_data.get('q',None)
    titles = cache.get('titles')
    if titles==None:
        print ('load data...')
        texts = []
        mobjs = MovieData.objects.all()
        ndim = mobjs[0].ndim
        matr = np.empty([1,ndim])

    else:
        print ('loaded',str(len(titles)))

【问题讨论】:

  • 看看查询集mobjs在db查询之后设置了什么。你会发现它是空的。您确定数据库中有该模型的记录吗?
  • 这是因为MovieData.objects.all() 返回一个空的QuerySet ([])。稍后,当您尝试访问第一个元素时,它会失败。
  • 添加至少一个MovieData,你应该很好

标签: python django python-2.7 django-views


【解决方案1】:

你也可以尝试使用try:except:语句和except Error。您可以编写自己的 Exception 或使用一些 biuld 的:Python Errors and Exceptions

类似的东西:

try:
    mobjs = MovieData.objects.all()
    ndim = mobjs[0].ndim
    matr = np.empty([1,ndim])
except Exception as e: 
    print(e)

希望它的工作;P

【讨论】:

    【解决方案2】:

    试试这个:

        mobjs = MovieData.objects.all().first()
        if mobjs:
            ndim = mobjs[0].ndim
            matr = np.empty([1,ndim])
        else:
            print('there is no MovieData')
    

    【讨论】:

    • 查询集是否为空可能无济于事
    • 空查询集 first() 将返回 None,这是什么问题?
    • 哦,对不起。我错了)
    • 查询集为空
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2014-10-20
    • 2019-02-23
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多