Chris Fonnesbeck wrote: > I thought I knew how to do error handling in python, but apparently I > dont. I have a bunch of code to calculate statistical likelihoods, and > use error handling to catch invalid parameters. For example, for the > bernoulli distribution, I have: > > def bernoulli_like(self, x, p, name='bernoulli'): > ... if sum(p>=1 or p<=0): raise LikelihoodError ... > > where LikelihoodError is simply a subclass of ValueError that I created: > > class LikelihoodError(ValueError): > "Log-likelihood is invalid or negative infinite" > > I catch these errors with the following: > > try: like = self.calculate_likelihood() > except LikelihoodError: > return 0 > > ... [when using] ... > like=self.bernoulli_like(x,p) > > I get the following when an invalid parameter is passed: > > Traceback (most recent call last): > File "...\model_000.py", line 381, in ? > model.sample(iterations=iter, burn=burn,plot=False) > File "...\PyMC\MCMC.py", line 1691, in sample > self._like = self.calculate_likelihood() > File "...\model_000.py", line 194, in calculate_likelihood > like+=self.bernoulli_like(x,p) > File "...\MCMC.py", line 868, in bernoulli_like > if sum(p>=1 or p<=0): raise LikelihoodError > LikelihoodError > > I have no idea how this can happen, given how I have coded this.
Might you be referring to a different LikelihoodError in the try: ... except ... part of your code than in the ... raise ... part? Similarly defined classes are not the same class. If you didn't get LikelihoodError in mode4l_000.py with the moral equivalent of from MCMC import LikelihoodError then this is what is going wrong. By the way, if it were I, I'd: raise LikelihoodError(p) just so I could discover a bit of what went wrong. --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list