2017-01-24 3 views
-1

Я получаю сообщение об ошибке, которое я не могу понять правильно. т.е. разница между tuple и int в соответствии с ошибкой. Я прочитал ответ, но не мог понять его с точки зрения новичка (без кодирования).Разница между кортежем и int и недопустимыми типами ошибок: tuple() <int()?

Если кто-нибудь может объяснить это с помощью простых, непрофессиональных терминов, ответ будет замечательным.

Traceback (most recent call last): File "", line 7, in File "C:\Python34\lib\site-packages\openpyxl\worksheet\worksheet.py", line 300, in cell if row < 1 or column < 1: TypeError: unorderable types: tuple() < int()

import re, openpyxl, os, sys 
from openpyxl import Workbook 
from openpyxl.compat import range 
from openpyxl.utils import get_column_letter 

cont_us = ['hi','how','are'] 
wb = Workbook() 
dest_filename = "Trying web.xlsx" 
ws1 = wb.active 
if cont_us: 
    i=1 
    for i in enumerate(cont_us,0): 
     ws1.cell(row = i, column = 2).value = cont_us 
     i = i+1 
     wb.save(file_name = dest_filename) 
+0

Кортеж - это неизменный, хешируемый, упорядоченный список элементов (по сравнению с обычным списком Python, который изменен и, следовательно, не является хешируемым). Целое число ... ну, целое число (целое число) и точно * один * элемент. –

+0

Это python, сообщающий о ошибке типа. Это будет проблема с форматом данных, которые вы передаете openpyxl. –

ответ

3

enumerate возвращает Iterable кортежей, содержащих индекс и связанный с ним элемент. Вы должны распаковать соответственно, чтобы получить целочисленный индекс (не кортеж), который может быть использован для доступа к ячейке в листе:

if cont_us: 
    for i, x in enumerate(cont_us, 1): 
     ws1.cell(row = i, column = 2).value = x # assign item, not list 
wb.save(file_name = dest_filename) 

Более того, если вам не нужны элементы в списке, вы можете просто использовать range:

if cont_us: 
    for i in range(len(cont_us)): 
     ... 

на стороне записки, вам не нужно инициализировать или увеличивать i, цикл for уже делает это.

+0

Спасибо. Я все еще обволакиваю его мозг. Мне нужны элементы в списке. Получение ошибки с использованием первого кода: _ValueError: значения строк или столбцов должны быть не менее 1_ – Sid

+1

Начало отсчета с 1. Я обновил код –

+0

Спасибо. Он работает отлично. Я пытаюсь вспомнить, как начать с строки 2 сейчас. У меня было это в старом коде, но, похоже, просто написать первое значение дважды, теперь B1 и B2 имеют Hi. Попытка разобраться. – Sid

Смежные вопросы