Google应用程序引擎(Python SDK)-如何捕获数据库异常

Google应用程序引擎(Python SDK)-如何捕获数据库异常,python,google-app-engine,Python,Google App Engine,我将Google App Engine与Python一起使用,遇到如下错误: raise BadValueError('Property %s is not multi-line' % self.name) BadValueError: Property title is not multi-line ERROR 2014-09-20 16:01:23,969 wsgi.py:278] Traceback (most recent call last): try: r.put(

我将Google App Engine与Python一起使用,遇到如下错误:

raise BadValueError('Property %s is not multi-line' % self.name)
BadValueError: Property title is not multi-line
ERROR    2014-09-20 16:01:23,969 wsgi.py:278] 
Traceback (most recent call last):
try:
    r.put()
except db.Error:
    pass
我已经导入了db模块:从google.appengine.ext导入db

我现在正试图用如下代码悄悄地捕捉错误:

raise BadValueError('Property %s is not multi-line' % self.name)
BadValueError: Property title is not multi-line
ERROR    2014-09-20 16:01:23,969 wsgi.py:278] 
Traceback (most recent call last):
try:
    r.put()
except db.Error:
    pass
然而,这个错误继续破坏程序的执行。我做错了什么?还是不做

谢谢

以下是完整的回溯:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/Users/me/myapp/myapp.py", line 191, in get
    date_last_modified = date_last_modified)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 970, in __init__
    prop.__set__(self, value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 614, in __set__
    value = self.validate(value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2847, in validate
    raise BadValueError('Property %s is not multi-line' % self.name)
BadValueError: Property column_series is not multi-line
  File "/Users/me/myapp/myapp.py", line 191, in get
    date_last_modified = date_last_modified)
设置属性时引发异常;您可以看到该行的最后一部分,您应该在回溯中捕获代码中的异常:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/Users/me/myapp/myapp.py", line 191, in get
    date_last_modified = date_last_modified)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 970, in __init__
    prop.__set__(self, value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 614, in __set__
    value = self.validate(value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2847, in validate
    raise BadValueError('Property %s is not multi-line' % self.name)
BadValueError: Property column_series is not multi-line
  File "/Users/me/myapp/myapp.py", line 191, in get
    date_last_modified = date_last_modified)

您正在那里创建或更新一个实例,这是应该捕获异常的地方,而不是在调用r.put时。

首先,您捕获的异常是错误的。异常为BadValueError。@BurhanKhalid:db.BadValueError是db.Error的子类。您有正确的异常;但是你是在正确的位置抓到的吗?请向我们显示完整的回溯。@Martijn Pieters-我已经添加了回溯。@dmc7z:因此,当您设置属性时,会引发异常。打电话给r.put的时候不行。参见get方法的第191行。啊,有道理。非常感谢。