2012-03-22 169 views
0

我在这里和那里经历了很多类似的帖子,但是他们中没有一个似乎解决了我的问题。我有一个搜索文件路径的方法:python:'str'对象不可调用?

def getDumpFile(self): 
     self.saveDump() 
     dumpname = str(self.filename)+'-01.netxml' 

     filepath = os.path.join('/some/path/to/file',dumpname) 
     try: 
      if os.path.exists(os.path.join('/some/path/to/file',dumpname)): 
       logging.debug("Filepath "+str(filepath)) 
       return filepath 
      else: 
       logging.debug("File Not Found") 
       return None 
     except OSError as e: 
      logging.debug("File not created: "+str(e)) 
      return None 

,并在主函数中我调用这个函数是这样的:

xmlfile = wscanner.getDumpFile() 

,当我执行上面的代码,发现在getDumpFile()正确的路径的方法,但在服务器给出例外:

Unexpected exception in wireless.views.attackAP with type <type 'exceptions.TypeError'> and error 'str' object is not callable 

我真的不知道为什么经过filepathxmlfile变量(我相信以前从未启动)可能导致错误,请帮助。谢谢。

编辑:它实际上是代码xmlfile = wscanner.getDumpFile(),发出错误,但我不知道为什么。注释掉这行会摆脱错误,但我稍后需要此路径。

+4

请提供完整的追溯你的错误。你甚至没有把我们指向错误发生的那一行。 – 2012-03-22 15:21:54

+5

确实有人定义了一个叫做str的变量,它隐藏了内建函数吗?来自其他语言,我几次意外地做了这件事。 – 2012-03-22 15:22:33

+0

我的猜测,但没有看到更多的代码,它只是一个猜测 - 你需要返回一个实际的文件引用对象,或一些其他具有方法的对象,而不是文件名。 – 2012-03-22 15:24:37

回答

1

这就是为什么我喜欢StackOverflow - 它会让你真的陷入更深层次。

最后一张海报是100%正确的。我写了一个快速课来演示这个问题。如果我必须去我们从海报知道,我会建议采取仔细看看到getDumpFile引用,以确保有人不小心分配一个字符串值,以它:

class MyClass: 
    def getDumpFile(self): 
     pass 

myclass = MyClass() 
myclass.getDumpFile = 'hello world' 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'str' object is not callable 
0

在这个模块中有一些'非pythonic'的东西正在进行。但让我们暂时忽略这一点。

你说的错误消息来自调用方法:

xmlfile = wscanner.getDumpFile() 

如果我猜的话,我会说“wscanner”没有定义是怎么想的是 - 特别是,在python解释器认为它是一个字符串。

尝试调用getDumpFile(右前添加此调用)

print type(wscanner) 

看看它显示。

+2

如果'wscanner'是一个字符串,你会得到一个AttributeError,而不是TypeError。 – interjay 2012-03-22 15:42:48