Note that there are some explanatory texts on larger screens.

plurals
  1. POFlask error handling
    text
    copied!<p>I'm trying to catch an error generated by flask-sqlalchemy. My code unfortunately can't handle the error because the debugger catches it first. It happens when I try to insert a record into a database with a field that's supposed to be unique but is duplicated.Is there any way around this? This is the traceback.</p> <pre><code>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. </code></pre> <p>I forgot to mention how flask reacts when I try to handle the error. I get something related to an undefined global. Here's the traceback for that.</p> <pre><code>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 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload