2017-09-15 4 views
-1

に定義されていない、私はエラーを得た:NameError:名「シート」が

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

私はコードを書いた:このエラーは、私が使用するために何かを追加happens.Shouldなぜ

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

私は本当に理解することはできませんを初期化するにはどうすればよいですか?

答えて

1

の代わりにself.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

読み取り機能では、シートが定義されていません。あなたは私がライン8

0

を使用する必要がありますエラー自体は、それがあなたのread()方法で属性sheetを見つけることができないと言います。 2つの場所でsheetを使用しました。 1:forループのrange 2:forの最初の行にあります。

pythonのメソッド内の任意の属性を使用する場合は、クラス変数、ローカル変数、インスタンス変数、またはインポートされた属性のいずれかになります。

class variableまたはinstance variableは、selfでアクセスできます。

sheetinstance variableであるため、selfを使用してのみアクセスできます。

sheetの2つの出現を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

であるあなたは、 'range'に1つの以上の場所で補正のための –

+0

おかげ' self'を逃しました! –

0

で先にsheetself.を追加しました。この

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.nrows