python: provide better error message for wrapped C++ methods
authorSteve Reinhardt <steve.reinhardt@amd.com>
Sat, 4 Jan 2014 01:08:43 +0000 (17:08 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Sat, 4 Jan 2014 01:08:43 +0000 (17:08 -0800)
If you successfully export a C++ SimObject method, but try to
invoke it from Python before the C++ object is created, you
get a confusing error that says the attribute does not exist,
making you question whether you successfully exported the
method at all.  In reality, your only problem is that you're
calling the method too soon.  This patch enhances the error
message to give you a better clue.

src/python/m5/SimObject.py

index 013f609d6a3194cb46c5876aeacd2a3e9cdb1576..fc5416cbfb2a7355a0f94f76e97bd01b88e04b24 100644 (file)
@@ -724,9 +724,15 @@ class SimObject(object):
         if self._ccObject and hasattr(self._ccObject, attr):
             return getattr(self._ccObject, attr)
 
-        raise AttributeError, "object '%s' has no attribute '%s'" \
+        err_string = "object '%s' has no attribute '%s'" \
               % (self.__class__.__name__, attr)
 
+        if not self._ccObject:
+            err_string += "\n  (C++ object is not yet constructed," \
+                          " so wrapped C++ methods are unavailable.)"
+
+        raise AttributeError, err_string
+
     # Set attribute (called on foo.attr = value when foo is an
     # instance of class cls).
     def __setattr__(self, attr, value):