Mercurial > genshi > mirror
comparison markup/eval.py @ 42:28ddb79414b2 trunk
Catch `KeyError` exception when trying attribute access in expression evaluation.
author | cmlenz |
---|---|
date | Mon, 03 Jul 2006 21:50:56 +0000 |
parents | 2224a52256ca |
children | 59eb24184e9c |
comparison
equal
deleted
inserted
replaced
41:686059a8a32b | 42:28ddb79414b2 |
---|---|
123 obj = self._visit(node.expr, data) | 123 obj = self._visit(node.expr, data) |
124 if hasattr(obj, node.attrname): | 124 if hasattr(obj, node.attrname): |
125 return getattr(obj, node.attrname) | 125 return getattr(obj, node.attrname) |
126 try: | 126 try: |
127 return obj[node.attrname] | 127 return obj[node.attrname] |
128 except TypeError: | 128 except (KeyError, TypeError): |
129 return None | 129 return None |
130 | 130 |
131 def _visit_slice(self, node, data): | 131 def _visit_slice(self, node, data): |
132 obj = self._visit(node.expr, data) | 132 obj = self._visit(node.expr, data) |
133 lower = node.lower and self._visit(node.lower, data) or None | 133 lower = node.lower and self._visit(node.lower, data) or None |
263 obj = self._visit(node.value, data) | 263 obj = self._visit(node.value, data) |
264 if hasattr(obj, node.attr): | 264 if hasattr(obj, node.attr): |
265 return getattr(obj, node.attr) | 265 return getattr(obj, node.attr) |
266 try: | 266 try: |
267 return obj[node.attr] | 267 return obj[node.attr] |
268 except TypeError: | 268 except (KeyError, TypeError): |
269 return None | 269 return None |
270 | 270 |
271 def _visit_call(self, node, data): | 271 def _visit_call(self, node, data): |
272 func = self._visit(node.func, data) | 272 func = self._visit(node.func, data) |
273 if func is None: | 273 if func is None: |