Python 脚本问题
Issue with Python Script
我的代码有问题,我得到以下输出:
Traceback (most recent call last):
File "1stHour.py", line 48, in
ws1.cell(column=1, row=i, value="%s" % blue_student_list[i])
IndexError: list index out of range`
# coding=utf:8
from pythonzenity import Message
from openpyxl.styles import PatternFill
from openpyxl import Workbook
import bluetooth
import time
def student_check(index):
result = bluetooth.lookup_name(blue_address_list[index], timeout=3)
if (result is not None):
return True
else:
return False
blue_student_list = ['Name', 'Name2']
blue_address_list = ['Address', 'Address2']
redFill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
greenFill = PatternFill(start_color='00FF00', end_color='00FF00', fill_type='solid')
for i in range(0, len(blue_address_list)):
i = i + 1
ws1.cell(column=1, row=i, value="%s" % blue_student_list[i])
if (student_check(i)):
ws1.cell(column=2, row=i, value="%s" % "Present").fill = greenFill
else:
ws1.cell(column=2, row=i, value="%s" % "Absent").fill = redFill
Message(title="Attendance Checker",text="You can now open the Excel Document on your Desktop", timeout=3000)
我有这个工作但忘了保存它,所以我没有以前在这里的正确方法了。我能做些什么来防止这个错误?我觉得我忘记了什么或在我的代码的 i = i + 1
部分写了什么。
当你这样做时:
for i in range(0, len(blue_address_list)):
没有必要也这样做:
i = i + 1
这样做会导致您看到的错误类型。
您似乎正在这样做,因为您使用的库使用基于 1 的索引,而不是像 Python 列表中那样基于 0 的索引。但是当您这样做时,您仍在使用(1 太高)i
索引到列表中:
blue_student_list[i]
因此,不是第二次递增 i
,而是将一个高 1 的值传递给需要它的东西:
ws1.cell(column=1, row=i+1, value="%s" % blue_student_list[i])
和对 ws1.cell
的其他调用类似。
至少可以说,这对于 Python 库来说是.. 不寻常的,因此可能需要在您首次使用 row=i+1
:
之前添加这样的评论
# Need row=i+1 because openPyXML uses 1-based indexing
行和列在 openpyxl 中的索引为 1,因此 ws['A1']
对应于 ws.cell(column=1, row=1)
。
IndexError
几乎肯定来自 blue_student_list[i]
查找。最好使用额外的一行来获取值并避免使用“%s”格式,因为它在这里完全没有必要。
for idx, value in enumerate(blue_student_list, start=1):
ws1.cell(column=1, row=idx, value=value)
我的代码有问题,我得到以下输出:
Traceback (most recent call last):
File "1stHour.py", line 48, in
ws1.cell(column=1, row=i, value="%s" % blue_student_list[i])
IndexError: list index out of range`
# coding=utf:8
from pythonzenity import Message
from openpyxl.styles import PatternFill
from openpyxl import Workbook
import bluetooth
import time
def student_check(index):
result = bluetooth.lookup_name(blue_address_list[index], timeout=3)
if (result is not None):
return True
else:
return False
blue_student_list = ['Name', 'Name2']
blue_address_list = ['Address', 'Address2']
redFill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
greenFill = PatternFill(start_color='00FF00', end_color='00FF00', fill_type='solid')
for i in range(0, len(blue_address_list)):
i = i + 1
ws1.cell(column=1, row=i, value="%s" % blue_student_list[i])
if (student_check(i)):
ws1.cell(column=2, row=i, value="%s" % "Present").fill = greenFill
else:
ws1.cell(column=2, row=i, value="%s" % "Absent").fill = redFill
Message(title="Attendance Checker",text="You can now open the Excel Document on your Desktop", timeout=3000)
我有这个工作但忘了保存它,所以我没有以前在这里的正确方法了。我能做些什么来防止这个错误?我觉得我忘记了什么或在我的代码的 i = i + 1
部分写了什么。
当你这样做时:
for i in range(0, len(blue_address_list)):
没有必要也这样做:
i = i + 1
这样做会导致您看到的错误类型。
您似乎正在这样做,因为您使用的库使用基于 1 的索引,而不是像 Python 列表中那样基于 0 的索引。但是当您这样做时,您仍在使用(1 太高)i
索引到列表中:
blue_student_list[i]
因此,不是第二次递增 i
,而是将一个高 1 的值传递给需要它的东西:
ws1.cell(column=1, row=i+1, value="%s" % blue_student_list[i])
和对 ws1.cell
的其他调用类似。
至少可以说,这对于 Python 库来说是.. 不寻常的,因此可能需要在您首次使用 row=i+1
:
# Need row=i+1 because openPyXML uses 1-based indexing
行和列在 openpyxl 中的索引为 1,因此 ws['A1']
对应于 ws.cell(column=1, row=1)
。
IndexError
几乎肯定来自 blue_student_list[i]
查找。最好使用额外的一行来获取值并避免使用“%s”格式,因为它在这里完全没有必要。
for idx, value in enumerate(blue_student_list, start=1):
ws1.cell(column=1, row=idx, value=value)