2011-02-07 12 views
0

アプリエンジン(Python)のフォームハンドラで問題が発生しました。私は、サーバーエラーが発生したメッセージ「を取得し、ブラウザ上でApp Engine:TypeError in handlers.py

INFO 2011-02-07 14:06:59,364 dev_appserver.py:3317] "GET /favicon.ico HTTP/1.1" 404 - Traceback (most recent call last):

File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/wsgiref/handlers.py", line 92, in run self.result = application(self.environ, self.start_response)

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 531, in __call__ handler.handle_exception(e, self.__debug)

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 394, in handle_exception self.error(500) TypeError: 'bool' object is not callable

INFO 2011-02-07 14:07:01,986 dev_appserver.py:3317] "POST /newevent HTTP/1.1" 500 -`

:私はハンドラにフォームを投稿するとき基本的に私は、次のトレースバックを取得します。管理者に連絡してください。ご覧のように、POSTコマンドの前にエラーが発生し、ハンドラーコードからエラーが発生していないようです。ここではそのフォームのハンドラクラスは(post_secureは、親クラスでPOSTメソッドによって呼び出されるメソッドです)です:

class SaveEvent(BaseHandler): 
def post_secure(self): 
    userinfo = db.GqlQuery("SELECT * FROM User WHERE fbid = :1", self.user['uid'])[0] 
    newevent = Event(parent=userinfo) 
    self.error = False 
    self.template_values = {} 

    if (self.request.get('eventname') == ""): 
     self.template_values['eventnameerror'] = True 
     self.error = True 
    else: 
     newevent.eventname = self.request.get('eventname') 

    if (self.request.get('venuename') == ""): 
     self.template_values['venuenameerror'] = True 
     self.error = True 
    else: 
     newevent.venuename = self.request.get('venuename') 

    if (re.match("[0-9]+\.[0-9][0-9]", self.request.get('eventprice')) == None): 
     self.template_values['eventpriceerror'] = True 
     self.error = True 
    else: 
     newevent.price_pence = int(float(self.request.get('eventprice')) * 100) 

    if (re.match("[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]", self.request.get('eventdate')) == None): 
     self.template_values['eventdateerror'] = True 
     self.error = True 
    else: 
     day = re.split("/", self.request.get('eventdate'))[0] 
     month = re.split("/", self.request.get('eventdate'))[1] 
     year = re.split("/", self.request.get('eventdate'))[2] 

    if (re.match("[0-2][0-9]:[0-5][0-9]", self.request.get('eventtime')) == None): 
     self.template_values['eventtimeerror'] = True 
     self.error = True 
    else: 
     hours = re.split(":", self.request.get('eventtime'))[0] 
     minutes = re.split(":", self.request.get('eventtime'))[1] 

    try: 
     newevent.date = datetime.datetime(year, month, day, hours, minutes, 0, 0) 
    except ValueError: 
     self.template_values['eventdatetimeerror'] = True 
     self.error = True 

    if (newevent.date < datetime.datetime.now()): 
     self.template_values['eventdateerror2'] = True 
     self.error = True 

    if (self.request.get('eventlink') == ""): 
     self.template_values['eventlinkerror'] = True 
     self.error = True 

    if (self.error == True): 
     self.template_values['eventname'] = self.request.get('eventname') 
     self.template_values['venuename'] = self.request.get('venuename') 
     self.template_values['eventprice'] = self.request.get('eventprice') 
     self.template_values['eventdate'] = self.request.get('eventdate') 
     self.template_values['eventtime'] = self.request.get('eventtime') 
     self.template_values['eventlink'] = self.request.get('eventlink') 
     self.tpl('addevent.html', self.template_values) 

    newevent.put() 

    self.template_values = { 
     'newevent' : newevent 
    } 

    self.tpl('eventadded.html', self.template_values) 

答えて

2

RequestHandlerクラスはerror

エラー(コード)

という名前のメソッドを持っています

A shortcut method for handlers to use to return an error response. Clears the response output stream and sets the HTTP error code to code. Equivalent to calling self.response.clear() and self.response.set_status(code).

上記のPOSTハンドラは、そのメソッドをブール値で上書きし、フレームワークがself.error(500)を呼び出そうとすると例外をスローしますe self.errorの値はもはや呼び出し可能ではありません。

これを防ぐには、errorとは異なるメンバ変数名を使用してください。

+0

よく見つかった!回答いただきありがとうございます。 +1 – benwad