NameError:name' sheet'没有定义

时间:2017-09-15 04:15:09

标签: python django

我收到了一个错误:

  

NameError:name' sheet'没有定义。我想解析excel并打印内容。

我写的代码:

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 个答案:

答案 0 :(得分: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 :(得分:1)

在读取功能中,没有定义纸张。你应该使用self.sheet.nrows

答案 2 :(得分: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()

我在第8行self.之前添加了sheet

答案 3 :(得分:0)

错误本身表示它无法在sheet方法中找到属性read()。您在两个地方使用了sheet: 1:在for循环中range 2:在for循环的第一行。

如果要在python中的任何方法中使用任何属性,那么它只能是类变量或局部变量或实例变量或某些导入的属性。

class variableinstance variable可以通过self访问。

在您的情况下,sheetinstance 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()