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:
Copyright (C) 2012-2017 Edgewall Software