Python列表:列表索引超出范围
我不太熟悉python,这段代码是从我的一个朋友那里得到的,需要一些社区帮助来解决这个问题 天数=列表(zip(Leave\u type.objects.filter(type=leavetype).values\u list('max\u days',flat=True))[0]) 注意:我已经执行了迁移并设置了数据库Python列表:列表索引超出范围,python,django,python-2.7,django-models,Python,Django,Python 2.7,Django Models,我不太熟悉python,这段代码是从我的一个朋友那里得到的,需要一些社区帮助来解决这个问题 天数=列表(zip(Leave\u type.objects.filter(type=leavetype).values\u list('max\u days',flat=True))[0]) 注意:我已经执行了迁移并设置了数据库 def timeoffapply(request): if not request.session.get('id', None): return render(re
def timeoffapply(request):
if not request.session.get('id', None):
return render(request, 'login.html')
else:
stdate = request.POST['startDate']
enddate = request.POST['endDate']
leavetype = request.POST['leaveType']
days = list(zip(Leave_type.objects.filter(type=leavetype).values_list('max_days', flat=True))[0])
d1 = datetime.strptime(stdate, "%Y-%m-%d")
d2 = datetime.strptime(enddate, "%Y-%m-%d")
d3 = abs((d2 - d1).days)+1
empid = (request.session['id'])[0]
countdays = Leave.objects.filter(Emp_id = empid,type=leavetype).aggregate(Sum('days'))
if countdays['days__sum'] == None:
finaday = (days[0] - 0)
else:
finaday=(days[0] - countdays['days__sum'])
if enddate>=stdate:
if finaday >= d3:
getleaveid = list(zip(Leave_type.objects.filter(type=leavetype).values_list('id', flat=True))[0])
split_lt_id = ("".join(str(e) for e in getleaveid))
empid = (request.session['id'])[0]
get_emp_name = list(zip(Employee.objects.filter(id=empid).values_list('name', flat=True))[0])
get_emp_name = ("".join(str(e) for e in get_emp_name))
empid = (request.session['id'])[0]
leave_id = Leave.objects.all().count()
test = Leave(id=(leave_id + 1), name=get_emp_name, type=leavetype, start_date=stdate, end_date=enddate,
days=d3,
status="pending")
test.Emp_id_id = empid
test.leave_type_id_id = split_lt_id
test.save()
return HttpResponseRedirect('/')
else:
qs = Leave.objects.all().filter(Emp_id=(request.session['id'])[0])
context = {
"qs": qs,
"error": "true",
"msg": "You are allowed to have holidays for " + str(finaday) + " days in " +str(leavetype)
}
return render(request, 'timeoff.html', context)
在某种情况下,从
Leave\u type.objects.filter(type=leavetype.values)返回的列表('max\u days',flat=True)
为空,您使用[0]
访问空列表中的第一个元素。因此导致列表索引超出范围错误。可能存在这样一种情况,即从Leave\u type.objects.filter(type=leavetype.values)返回的列表('max\u days',flat=True)
为空,并且您正在使用[0]
访问空列表中的第一个元素。因此导致列表索引超出范围
错误。问题只是从Leave\u类型模型返回的queryset为空;因此,您无法访问它。问题只是从Leave_类型模型返回的queryset为空;因此,您无法访问它。在分配之前,打印分配正确部分的组件,您应该找到错误原因。您想更熟悉Python吗?这段代码可以在许多方面得到改进(finaday=(days[0]-0)
…),这将使您更容易理解错误。导致错误的那一行也很奇怪(没有必要使用zip
,一个片段就可以了,但即使这样也没有必要,因为days
的唯一用法是days[0]
,所以您可以先获得结果)。无论如何,错误信息并不存在;列表必须为空,您可以按照progmatico的建议进行打印,找出与预期不同的原因。在作业之前,打印作业右侧的组件,您应该找到错误原因。您想更熟悉Python吗?这段代码可以在许多方面得到改进(finaday=(days[0]-0)
…),这将使您更容易理解错误。导致错误的那一行也很奇怪(没有必要使用zip
,一个片段就可以了,但即使这样也没有必要,因为days
的唯一用法是days[0]
,所以您可以先获得结果)。无论如何,错误信息并不存在;列表必须为空,您可以按照progmatico的建议进行打印,找出与预期不同的原因。我填充了关于离开类型的数据库表,并尝试再次调试我的程序,但仍然出现相同的错误。我填充了关于离开类型的数据库表,并尝试再次调试我的程序,但我仍然没有成功获取相同的错误我填充了关于离开类型的数据库表,并再次尝试调试我的程序,但如果您将check=leave\u-type.objects.filter(type=leavetype)
添加到您的代码中,在问题行上方的代码中是否check
为空查询集,则仍然会收到相同的错误?或者是否有数据?您可能在数据库中有数据,但您的查询没有返回数据。我填充了关于离开类型的数据库表,并再次尝试调试我的程序,但如果您添加check=leave\u type.objects.filter(type=leavetype),我仍然会收到相同的错误
到您的代码,问题行上方是检查
空查询集吗?或者是否有数据?数据库中可能有数据,但查询没有返回数据。