Python 烧瓶错误处理

Python 烧瓶错误处理,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我试图捕捉炼金术产生的错误。很遗憾,我的代码无法处理该错误,因为调试器首先捕获了它。当我试图将一条记录插入到一个数据库中时,会发生这种情况,该数据库中的一个字段应该是唯一的,但却是重复的。有没有办法解决这个问题?这是回溯 sqlalchemy.exc.IntegrityError IntegrityError: (IntegrityError) column username is not unique u'INSERT INTO user (username, password, karma

我试图捕捉炼金术产生的错误。很遗憾,我的代码无法处理该错误,因为调试器首先捕获了它。当我试图将一条记录插入到一个数据库中时,会发生这种情况,该数据库中的一个字段应该是唯一的,但却是重复的。有没有办法解决这个问题?这是回溯

sqlalchemy.exc.IntegrityError

IntegrityError: (IntegrityError) column username is not unique u'INSERT INTO user (username, password, karma) VALUES (?, ?, ?)' (u'Test', u'test', 0)
Traceback (most recent call last)

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 889, in __call__

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return self.wsgi_app(environ, start_response)

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 879, in wsgi_app

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] response = self.make_response(self.handle_exception(e))

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 876, in wsgi_app

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] rv = self.dispatch_request()

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 695, in dispatch_request

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return self.view_functions[rule.endpoint](**req.view_args)

    *
      File "/home/josh/Projects/masterpieces_of_code/app.py", line 70, in create_user

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] db.session.commit()

    *
      File "/usr/share/pyshared/sqlalchemy/orm/scoping.py", line 129, in do

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return getattr(self.registry(), name)(*args, **kwargs)

    *
      File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 653, in commit

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] self.transaction.commit()

    *
      File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 364, in commit

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] self._prepare_impl()

    *
      File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 348, in _prepare_impl

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] self.session.flush()

    *
      File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 1346, in flush

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] self._flush(objects)

    *
      File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 1427, in _flush

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] flush_context.execute()

    *
      File "/usr/share/pyshared/sqlalchemy/orm/unitofwork.py", line 299, in execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] rec.execute(self)

    *
      File "/usr/share/pyshared/sqlalchemy/orm/unitofwork.py", line 443, in execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] uow

    *
      File "/usr/share/pyshared/sqlalchemy/orm/mapper.py", line 1833, in _save_obj

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] execute(statement, params)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1794, in execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] object, *multiparams, **params)

    *
      File "/usr/share/pyshared/sqlalchemy/interfaces.py", line 149, in execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return execute(clauseelement, *multiparams, **params)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1157, in execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] params)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1237, in _execute_clauseelement

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return self.__execute_context(context)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1268, in __execute_context

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] context.parameters[0], context=context)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1806, in _cursor_execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] cursor, statement, parameters, context, False)

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flaskext/sqlalchemy.py", line 115, in cursor_execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return execute(cursor, statement, parameters, context)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1367, in _cursor_execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] context)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1360, in _cursor_execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] context)

    *
      File "/usr/share/pyshared/sqlalchemy/engine/default.py", line 288, in do_execute

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] cursor.execute(statement, parameters)

    IntegrityError: (IntegrityError) column username is not unique u'INSERT INTO user (username, password, karma) VALUES (?, ?, ?)' (u'Test', u'test', 0)

This is the Copy/Paste friendly version of the traceback. You can also paste this traceback into the public lodgeit pastebin:

Traceback (most recent call last):
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 889, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 879, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 876, in wsgi_app
    rv = self.dispatch_request()
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 695, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/josh/Projects/masterpieces_of_code/app.py", line 70, in create_user
    db.session.commit()
  File "/usr/share/pyshared/sqlalchemy/orm/scoping.py", line 129, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 653, in commit
    self.transaction.commit()
  File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 364, in commit
    self._prepare_impl()
  File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 348, in _prepare_impl
    self.session.flush()
  File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 1346, in flush
    self._flush(objects)
  File "/usr/share/pyshared/sqlalchemy/orm/session.py", line 1427, in _flush
    flush_context.execute()
  File "/usr/share/pyshared/sqlalchemy/orm/unitofwork.py", line 299, in execute
    rec.execute(self)
  File "/usr/share/pyshared/sqlalchemy/orm/unitofwork.py", line 443, in execute
    uow
  File "/usr/share/pyshared/sqlalchemy/orm/mapper.py", line 1833, in _save_obj
    execute(statement, params)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1794, in execute
    object, *multiparams, **params)
  File "/usr/share/pyshared/sqlalchemy/interfaces.py", line 149, in execute
    return execute(clauseelement, *multiparams, **params)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1157, in execute
    params)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1237, in _execute_clauseelement
    return self.__execute_context(context)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1268, in __execute_context
    context.parameters[0], context=context)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1806, in _cursor_execute
    cursor, statement, parameters, context, False)
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flaskext/sqlalchemy.py", line 115, in cursor_execute
    return execute(cursor, statement, parameters, context)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1367, in _cursor_execute
    context)
  File "/usr/share/pyshared/sqlalchemy/engine/base.py", line 1360, in _cursor_execute
    context)
  File "/usr/share/pyshared/sqlalchemy/engine/default.py", line 288, in do_execute
    cursor.execute(statement, parameters)
IntegrityError: (IntegrityError) column username is not unique u'INSERT INTO user (username, password, karma) VALUES (?, ?, ?)' (u'Test', u'test', 0)

The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.

To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.

You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:

    * dump() shows all variables in the frame
    * dump(obj) dumps all that's known about the object

Brought to you by DON'T PANIC, your friendly Werkzeug powered traceback interpreter.
当我试图处理错误时,我忘了提到flask的反应。我得到了一些与未定义的全局相关的东西。这是这方面的追踪

Traceback (most recent call last):
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 889, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 879, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 876, in wsgi_app
    rv = self.dispatch_request()
  File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 695, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/josh/Projects/masterpieces_of_code/app.py", line 72, in create_user
    except(IntegrityError):
NameError: global name 'IntegrityError' is not defined

您需要在执行
db.session.commit()
的代码块中的
create\u user
函数(代码/app.py的杰作)中添加一个try/catch,并在那里处理异常

更新:如果您收到
IntegrityError
名称错误
,则表示您可能缺少

from sqlalchemy.exc import IntegrityError

在你的
app.py
中。这不是来自Flask的消息,这是Python在解释
app.py

中的代码时告诉您一个未知名称(因为缺少导入),您需要在执行
db.session.commit()的代码块中的
create\u user
函数(代码的杰作/app.py)中添加一个try/catch,并在那里处理异常

更新:如果您收到
IntegrityError
名称错误
,则表示您可能缺少

from sqlalchemy.exc import IntegrityError

在你的
app.py
中。这不是来自Flask的消息,这是Python在解释
app.py

中的代码时告诉您一个未知名称(因为缺少导入),谢谢,我忘了提到我已经尝试过了。不管出于什么原因,Flask说IntegrityError是一个未定义的全局变量。我已经更新了我原来的帖子来反映这一点。谢谢,我忘了提到我已经试过了。不管出于什么原因,Flask说IntegrityError是一个未定义的全局变量。我更新了我的原始帖子以反映这一点。我更新了我的答案以回应你的评论。我更新了我的答案以回应你的评论。