At Thursday 28/12/2006 14:01, Maksim Kasimov wrote:

> Nothing so clever. dir() eats and ignores all exceptions, so when you
> hit the recursion limit it eats the RecursionLimitExceeded exception
> and continues merrily along the way. This is probably not good
> behavior...
>
> class Foo:
>    def __getattr__(self, attr):
>        raise SystemExit, "Don't call me, again, ever"
>
> f = Foo()
> f.method() #dies correctly
> dir(f) #continues happily

can't understand - what kind of problem you tried to fix in that way?
if __getattr__ just raise some exception, it needless to define it at all.

The problem is, dir() blindly eats *all* exceptions, including the RecursionLimitExceeded on the original post, this SystemExit, KeyboardInterrupt, etc. It shouldn't.
Perhaps this example (esencially the same thing) is a bit more clear:

import sys
class Foo:
    def __getattr__(self, attr):
        print "About to exit program"
        sys.exit(1)

f = Foo()
dir(f)
print "You should not see this line"


--
Gabriel Genellina
Softlab SRL

        

        
                
__________________________________________________ Preguntá. Respondé. Descubrí. Todo lo que querías saber, y lo que ni imaginabas, está en Yahoo! Respuestas (Beta). ¡Probalo ya! http://www.yahoo.com.ar/respuestas
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to