2016-07-31 33 views
0

我試圖進入(蟒蛇)的代碼如下所示:爲什麼這是無效的語法? (級功能)

class RainfallTable: 
    def _init_ (self, njrainfall.txt): 
     self.njrainfall.txt = open(njrainfall.txt, 'r') 
    def close(self): 
     if self.t: 
      self.t.close() 
      self.t = None 

我試圖讓這個類只需打開一個名爲njrainfall.txt文件,但我得到以下錯誤留言當我這樣做:

File "3Homework.py", line 2 
def _init_ (self, njrainfall.txt): 
          ^

我在做什麼錯了?

+4

這是'__init__',雙下劃線。另一件事,在你的文件中,變量名中沒有'.', – Li357

+0

是,'__init__'。 –

+0

我添加了它,但它仍然說有一個錯誤,返回相同的消息 – Matt

回答

3

您的變量名中有.,這是py的無效語法馬拉松。刪除njrainfall.txt變量中的那些變量。一個好的替代品是njrainfall_file或類似的東西。其次,初始化函數中寫入兩個下劃線,就像這樣:

def __init__(self, njrainfall_file): 

這裏是一些代碼:

class RainfallTable: 
    def __init__(self, njrainfall_file): 
     self.njrainfall_file = open(njrainfall_file, 'r') 
    def close(self): 
     if self.t: 
      self.t.close() 
      self.t = None 

確保傳遞njrainfall_file作爲文件名的字符串!

+0

這是它!謝謝。一旦Stackoverflow允許我接受答案。非常感謝 – Matt

+0

@Matt沒問題,請記住仔細閱讀錯誤信息並檢查語法錯誤! – Li357

0

功能/構造函數應該只有變量輸入

您可以通過路徑傳遞下去文本文件名到初始化函數

更好地傳遞文本文件的絕對路徑

class RainfallTable: 
    def _init_ (self, textfile): 
     self.t = open(textfile, 'r') 
    def close(self): 
     if self.t: 
      self.t.close() 
      self.t = None 

呼叫它作爲RainfallTable('njrainfall.txt')

+0

有了這個建議,它看起來像這樣:class RainfallTable: \t'def __init__(self,njrainfall。TXT): \t \t self.fh =開放(njrainfall.txt) \t DEF接近(個體): \t \t如果self.t: \t \t \t self.t.close() \t \t \t self.t =無」 同樣的錯誤,雖然 – Matt

+0

不要把文本文件名作爲變量,而不是通過一個文本文件,該功能 –

+0

我相信,文件名應爲一個字符串傳遞 – Li357

0

它看起來像你與字符串,參數/變量名稱和類對象混淆。

您正在使用的點必須是變量名(njrainfall.txt),看起來像是具有實際文件名的字符串或對象屬性。

正如其他人已經指出的,你不能在變量/參數名稱中使用點。

而應該做使用(我添加了一個try..except處理,其中通過文件名不存在的情況下):

class RainfallTable: 
    def _init_ (self, sRainFallFilename): 
    try: 
     self.rainfallFile = open(sRainFallFilename, 'r') 
    except: 
     self.rainfallFile = None 
     print "file %s does not exist" % sRainFallFilename 

    def close(self): 
    if not self.rainfallFile == None : 
     self.rainfallFile.close() 
     self.rainfallFile = None 

通知我也改變了close()方法來使用相同的屬性在的init()

然後,你可以調用類的,如:

RainFallTable myRainFallTable("NJ.txt") 
... 
myRainFallTable.close() 
0

刪除這裏的句號

self.njrainfall.txt
到別的東西。

self.njrainfall