2017-09-15 143 views
-1

我得到了一個錯誤:NameError:名字「片」沒有定義

NameError: name 'sheet' is not defined .I wanna parse excel and print the content.

我寫代碼:

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() 

我真的不明白爲什麼這個錯誤我happens.Should添加的東西用init?我該如何解決這個問題?

回答

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

試試這個

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號線

+0

你已經錯過了'在self'在一個多個地方'range' –

+0

謝謝指正! –

0

增加了self.提前sheet錯誤本身說,它無法找到你read()方法的屬性sheet。您在兩處使用了sheet: 1:在for循環的range 2:在第一行for循環中。

如果您想使用python中的任何方法內的任何屬性,那麼它可以只是一個類變量或局部變量或實例變量或一些導入的屬性。

class variableinstance variable可以通過self訪問。

在你的情況下,sheetinstance variable,因此它只能使用self訪問。

所以,如果你改變sheetself.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() 
相關問題