> > But, the issue is, I have many places where I write to the database and
> > would have to embed each of these in a try/except block. I can do that,
> > but wondered if there is a "global" way to catch this 'database is locked'
> > error? I found someone asking this sort of question online but it doesn't
> > appear to be answered:
> > http://bytes.com/topic/python/answers/799486-how-do-i-prevent-exceptions-stopping-execution-global-exception-handler
>
> I'm not sure why you would like to do that: your code assumes the database
> interaction works fine, and based on that just continues it's normal flow. If
> the database is locked, you'll need to do something to prevent your code
> crashing further down, which is what you put in the except OperationalError:
> block. I would assume that the error handling depends on where you are in the
> code.
> If you can always perform the same type of error handling, just create a
> convenience function (possibly with the SQL statement as argument) that calls
> the database and returns the results, and put the database call inside the
> try: except: clause. Then you need to do this only once.
Interesting, it didn't occur to me to do that. I may give it a try. Since I
am making INSERTs and UPDATEs to the database from all over the application (in
different modules), maybe I should put this error-handling convenience function
in a module and import it into every other module, then I can just use it.
Unfortunately, I'll still have to go back and find every instance of when I do
INSERT or UPDATE to change this to use the convenience function, but it will
still save me some keystrokes to fix the app.
> A global way to catch the database-locked exception is just to put the try:
> except OperationalError: around your complete code. Exceptions propagate all
> the way to the function where your program started, and if you catch it
> there, you will catch every OperationalError exception from anywhere in the
> code. Of course, your program then always exits anyway, because you can't
> return to the point where the the exception was thrown (or maybe you can, but
> not that I'm aware of. I wouldn't recommend it though).
That I really didn't know at all. But yes, if the program exits, that's not
going to work.
> > > p.s. *I use the nice program SQLite Database Browser and if I edit a
> > > field in the database my Python app is accessing, click "Apply changes",
> > > but I do *not* save the changes (that is, I do not click the disk icon),
> > > when I go to write to that database from my Python app, I get a 'database
> > > is locked' error.
> Sounds like somewhat odd behaviour to me: "apply changes" for me means "apply
> & commit", ie, it includes the save operation. Might
> just be me. I guess "Apply changes" opens the database connection, but then
> "save" performs the actual commit to the database, and
> in the meantime the database is locked.
I don't know, either, but I was glad to find a way to reproduce the problem so
that I could anticipate it for potential users.
Thanks for your help,
Che
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor