Я новый программист, пытающийся создать инструменты, облегчающие мою работу. Вот мой код и ошибка, из которой я получаю. Моя проблема заключается в том, что в обработке цикла, когда пользователь вводит «пустой», он не останавливается на скошенной пустой ячейке, но выполняет итерацию до конца количества строк того, что может обрабатывать xlwt (65536). Код предназначен для обработки только одного столбца.Python: Бесконечная петля при тестировании, если ячейка пуста
Это ошибка:
File "sentenceconverter.py", line 114, in <module>
db1.write(i,0,new_cell)
File "C:\Python27\lib\site-packages\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:\Python27\lib\site-packages\xlwt\Worksheet.py", line 1078, in row
self.__rows[indx] = self.Row(indx, self)
File "C:\Python27\lib\site-packages\xlwt\Row.py", line 42, in __init__
raise ValueError("row index (%r) not an int in range(65536)" % rowx)
ValueError: row index (65536) not an int in range(65536)
`Это код (некоторые из моих комментариев не являются точными из-за правок я сделал):
#import everything
import xlrd
import xlwt
import sys
from sys import argv
import string
#get workbooks from command line
script,workbook1,destination = argv
#set the limit of cells to loop through
#cellnum=raw_input("How many cells do you want to work with?")
#open the workbooks for working with
wb=xlrd.open_workbook(workbook1)
sh=wb.sheet_by_index(0)
db=xlwt.Workbook()
#manage db for writing
db1=db.add_sheet('Definition')
new_cell=[]
cell_l=""
printable=string.printable
printable_n=printable.replace(".","").replace(":","").replace(string.lowercase,"").replace(string.uppercase,"")
printable_m=printable_n
#main loop
i=0
answer=raw_input("Til [empty] or til [row]?")
if answer == "row":
cellnum=raw_input("How many rows? do you want to work with?")
while i<=(int(cellnum)-1):
new_cell=[]
#reference correct cell and convert it to string format from unicode
cell_x=sh.cell_value(i,0)
cell_str=cell_x
#capitalize
if cell_str[0].islower():
cell_str_2=cell_str.capitalize()
else:
cell_str_2=cell_str
#add period
if any((c in printable_m) for c in cell_str_2[-1]):
#if cell_str_2[-1].contains(printable_m):
cell_str_f=cell_str_2[:-1]
new_cell+=cell_str_f+"."+"\n"
elif cell_str_2[-1]!="." and cell_str_2[-1]!=":":
new_cell+=cell_str_2+"."+"\n"
else:
new_cell+=cell_str_2+"\n"
#add cell to new sheet
db1.write(i,0,new_cell)
#iterate to next cell
i+=1
elif answer =="empty":
cell_type = sh.cell_type(i,0)
cell_x=sh.cell_value(i,0)
t=1
while t>0:
if cell_type == xlrd.XL_CELL_EMPTY:
t=0
else:
new_cell=[]
cell_str=cell_x
#capitalize
if cell_str[0].islower():
cell_str_2=cell_str.capitalize()
else:
cell_str_2=cell_str
#add period
if any((c in printable_m) for c in cell_str_2[-1]):
cell_str_f=cell_str_2[:-1]
new_cell+=cell_str_f+"."+"\n"
elif cell_str_2[-1]!="." and cell_str_2[-1]!=":":
new_cell+=cell_str_2+"."+"\n"
else:
new_cell+=cell_str_2+"\n"
#add cell to new sheet
db1.write(i,0,new_cell)
#iterate to next cell
i+=1
#db1.write(i,0,new_cell)
else:
sys.exit("Didn't work. Make sure you input everything as prompted.")
#save and close
db.save(destination)
`
Вы никогда ничего не меняете в условиях цикла while, так почему вы считаете, что цикл никогда не закончится? –
где вы меняете 't'? –
Попробуйте указать пример: [Short, Self Contained, Correct (Compilable)] (http://www.sscce.org) –