2016-07-31 76 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