dman
dman

Reputation: 11064

Python Generic Exception to Catch Rest Of Errors

This is a python script that runs in a Django environment by Celery. I need to create a catch the 'rest of the errors' and raise an exception so Celery will send a email on that exception.

Would this be the best way?

for thread in thread_batch:
   try:
        obj = query_set.get(thread_id=thread['thread_id'])
        for key, value in thread.iteritems():
            setattr(obj, key, value)
        obj.unanswered = True
    except ThreadVault.DoesNotExist:
        obj = ThreadVault(**thread)
    except:
        raise Exception("There has been a unknown error in the database")
    obj.save()

Upvotes: 0

Views: 1593

Answers (1)

Raydel Miranda
Raydel Miranda

Reputation: 14360

Yes, and empty except will catch any exception different from ThreadVault.DoesNotExist (in this case). But you can improve your code a little more.

Try always to put the less code possible inside the try block. You code could be:

for thread in thread_batch:
    try:
        obj = query_set.get(thread_id=thread['thread_id'])
    except ThreadVault.DoesNotExist:
        obj = ThreadVault(**thread)
    except:
        raise Exception("There has been a unknown error in the database")
    else:    # Note we add the else statement here.
        for key, value in thread.iteritems():
            setattr(obj, key, value)
        obj.unanswered = True
    # Since save function also hits the database
    # it should be within a try block as well.
    try:
       obj.save()
    except:
       raise Exception("There has been a unknown error in the database")

Upvotes: 1

Related Questions