NameError: имя «лист» не определено [дубликаты]

-2

У меня ошибка:

NameError: name 'sheet' не определен. Я хочу синтаксический анализ и печать содержимого.

Мои коды:

class ReadData():
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, sheet.nrows):
            rows = sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()

Я действительно не могу понять, почему эта ошибка возникает. Должен ли я добавить что-то, чтобы использовать init? Как я могу это исправить?

Теги:

4 ответа

1

Вы должны использовать self.sheet вместо простого sheet. Поэтому обновите свой метод как

def read(self):
    # ------------------------v
    for row_index in range(2, self.sheet.nrows):
       #---------v
        rows = self.sheet.row_values(row_index)
        print(rows)
1

в функции чтения нет определенного листа. вы должны использовать self.sheet.nrows

0

Сама ошибка говорит о том, что он не может найти sheet атрибутов в вашем методе read(). Вы использовали sheet в двух местах: 1: В for циклы range 2: В первой строке for цикла.

Если вы хотите использовать любой атрибут внутри любого метода в python, то это может быть только переменная класса или локальная переменная или переменная экземпляра или некоторый импортированный атрибут.

class variable или class variable instance variable можно получить через self.

В вашем случае sheet представляет собой instance variable и, следовательно, ее можно получить только с помощью self.

Поэтому, если вы измените эти два вхождения sheet на self.sheet, это сработает.

Вот ваш исправленный код

class ReadData(object):
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, self.sheet.nrows):
            rows = self.sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()
0

Попробуй это

class ReadData():
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, self.sheet.nrows):
            rows = self.sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()

Я добавил self. впереди sheet по строке 8

  • 0
    Вы пропустили self в еще одном месте в range
  • 0
    Спасибо за исправление!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню