2012-12-26 28 views
0

我使用cherrypymako與Python創建網站。減少Lambda錯誤:'Undefined'對象不可調用

在我的HTML文件中的一個,我有以下lambda函數:

${reduce(lambda list, cur : '<li>' + someFunction(cur) + '</li>' + 
          list, object.listing, '')} 

哪裏object.listing是字符串列表。

在提到的錯誤中執行結果:'未定義'對象不可調用。如果我刪除someFunction(),錯誤不會發生。所以我認爲它與curNoneUndefined有關,但我不知道如何防止這種情況。

我甚至不太確定,reduce函數是如何工作的。

整個堆棧跟蹤,如要求:

[26/Dec/2012:13:15:22] HTTP 
Request Headers: 
    REFERER: http://localhost:8080/list 
    HOST: localhost:8080 
    CONNECTION: keep-alive 
    Remote-Addr: 127.0.0.1 
    ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    USER-AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0 
    COOKIE: session_id=960e569568ded77610f11c48bec0a806f5a4501b 
    ACCEPT-LANGUAGE: en-US,en;q=0.5 
    DNT: 1 
    ACCEPT-ENCODING: gzip, deflate 
[26/Dec/2012:13:15:22] HTTP Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 656, in respond 
    response.body = self.handler() 
    File "/Library/Python/2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/encoding.py", line 188, in __call__ 
    self.body = self.oldhandler(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cpdispatch.py", line 34, in __call__ 
    return self.callable(*self.args, **self.kwargs) 
    File "/Volumes/Ritalin/Projects/splitpot/controller/Splitpot.py", line 54, in event 
    return tmpl.render(object=doSomething()) 
    File "/Library/Python/2.7/site-packages/mako/template.py", line 412, in render 
    return runtime._render(self, self.callable_, args, data) 
    File "/Library/Python/2.7/site-packages/mako/runtime.py", line 766, in _render 
    **_kwargs_for_callable(callable_, data)) 
    File "/Library/Python/2.7/site-packages/mako/runtime.py", line 798, in _render_context 
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs) 
    File "/Library/Python/2.7/site-packages/mako/runtime.py", line 824, in _exec_template 
    callable_(context, *args, **kwargs) 
    File "base_html", line 31, in render_body 
    File "someFile_html", line 58, in render_body 
    File "someFile_html", line 58, in <lambda> 
TypeError: 'Undefined' object is not callable 
+0

您應該使用stacktrace顯示整個錯誤,以便我們更容易診斷。 –

+0

向我們展示你的'someFunction'。你的例子中有什麼「cur」? – alexvassel

回答

0
'Undefined' object is not callable 

意味着你要撥打的東西不存在。調用意味着執行一個功能。最好猜測你提供的信息是someFunction實際上並不存在於你正在嘗試使用它的範圍內。

看着你的堆棧跟蹤和閱讀,你已經在python中定義了你的函數,而不是馬科,我想我明白這個問題。

http://docs.makotemplates.org/en/latest/syntax.html#def描述瞭如何在你的模板中定義一個函數。我不知道從mako模板回調python文件的方法 - 但是你可以在mako本身中編寫這些函數。

+0

如何正確使用模板中的功能?我如何導入一個Python類? – cherrun

+0

@cherrun其中是'someFunction'的定義,它有什麼作用?你有沒有在你的mako模板中定義它,還是在python文件中定義它? –

+0

它是在一個python文件中定義的。該函數根據給定的值返回一個特定的字符串。 – cherrun

0

我不知道是什麼問題(因此CW),只是想指出的是,列表理解可能是一個更好的選擇,這裏比reduce

html = ''.join('<li>' + someFunction(x) + '</li>' for x in listing) 

請注意,您reduce代碼實際上反轉列表,如果是故意的,加reversed以上:

html = ''.join('<li>' + someFunction(x) + '</li>' for x in reversed(listing)) 

此外,使用list(系統標識符)作爲變量名是不是一個好主意。

0

someFunction()指的是放在那裏的任何函數,還是一個特定的函數?如果是後者,我們可以看到這些代碼嗎? someFunction被替換爲例如代碼仍然錯誤(lambda x: x+x)(cur)