swaldman: A cute fluffy sheep curled up dreaming of Dreamwidth. Labelled "Simon: Bodger". (dw-dev)
Simon ([personal profile] swaldman) wrote in [site community profile] dw_dev_training2013-07-11 05:21 pm
Entry tags:

Error handling - help please?

Does anybody have time to do a quick rundown on how error handling should be done in DW, going forward?

There are a number of different ways of doing things within the codebase at present. I've tended to adopt LJ::throw for new stuff because it seemed comprehensible(!), but Mark has recently said in a review "I... don't think we use LJ::Error anywhere useful anymore. It's pretty old.". (given where the comment was made I assume that it referred to a LJ::throw statement, which I imagine must be part of a LJ::Error package)

So I'm wondering what best practice is now, and thus what we should do in new code?

Thanks
pauamma: Cartooney crab wearing hot pink and acid green facemask holding drink with straw (Default)

Elaborating on what Mark said

[personal profile] pauamma 2013-07-12 09:02 am (UTC)(link)
Here's an example of whether/when to use Carp::croak vs. die.

1- Your caller wants you to believe 6 impossible things before breakfast, and you can only do 5. (And your caller should know that, and should not ask you to do impossible things, only believe them.) Or one of those things that should be impossible is actually true. Clearly, it's your caller's fault, not yours. Use Carp::croak.

2- Your caller only handed you 5 impossible things to believe, but it turns out that you can't check whether those things are false, as they should be. (Perhaps you need a database or memcache to do that and it's broken.) That's beyond your caller's control, so you should just use die.