From 2c9590f62549ded76dbdf096ee106e7b43f004f5 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 29 Oct 2002 19:08:29 +0000 Subject: Added test for this fix to classobject.c: Since properties are supported here, is possible that instance_getattr2() raises an exception. Fix all code that made this assumption. Backport candidate. --- Lib/test/test_class.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py index e90a790..3c3ea06 100644 --- a/Lib/test/test_class.py +++ b/Lib/test/test_class.py @@ -288,3 +288,30 @@ except RuntimeError: pass else: raise TestFailed, "how could this not have overflowed the stack?" + + +# Tests for exceptions raised in instance_getattr2(). + +def booh(self): + raise AttributeError, "booh" + +class A: + a = property(booh) +try: + A().a # Raised AttributeError: A instance has no attribute 'a' +except AttributeError, x: + if str(x) is not "booh": + print "attribute error for A().a got masked:", str(x) + +class E: + __eq__ = property(booh) +E() == E() # In debug mode, caused a C-level assert() to fail + +class I: + __init__ = property(booh) +try: + I() # In debug mode, printed XXX undetected error and raises AttributeError +except AttributeError, x: + pass +else: + print "attribute error for I.__init__ got masked" -- cgit v0.12