@@ -399,7 +399,7 @@ def preloop(self): |
399 | 399 | displaying = self.displaying.get(self.curframe) |
400 | 400 | if displaying: |
401 | 401 | for expr, oldvalue in displaying.items(): |
402 | | - newvalue = self._getval_except(expr) |
| 402 | + newvalue, _ = self._getval_except(expr) |
403 | 403 | # check for identity first; this prevents custom __eq__ to |
404 | 404 | # be called at every loop, and also prevents instances whose |
405 | 405 | # fields are changed to be displayed |
@@ -1246,13 +1246,12 @@ def _getval(self, arg): |
1246 | 1246 | def _getval_except(self, arg, frame=None): |
1247 | 1247 | try: |
1248 | 1248 | if frame is None: |
1249 | | - return eval(arg, self.curframe.f_globals, self.curframe_locals) |
| 1249 | + return eval(arg, self.curframe.f_globals, self.curframe_locals), None |
1250 | 1250 | else: |
1251 | | - return eval(arg, frame.f_globals, frame.f_locals) |
1252 | | - except: |
1253 | | - exc_info = sys.exc_info()[:2] |
1254 | | - err = traceback.format_exception_only(*exc_info)[-1].strip() |
1255 | | - return _rstr('** raised %s **' % err) |
| 1251 | + return eval(arg, frame.f_globals, frame.f_locals), None |
| 1252 | + except BaseException as exc: |
| 1253 | + err = traceback.format_exception_only(exc)[-1].strip() |
| 1254 | + return _rstr('** raised %s **' % err), exc |
1256 | 1255 |
|
1257 | 1256 | def _error_exc(self): |
1258 | 1257 | exc_info = sys.exc_info()[:2] |
@@ -1437,13 +1436,19 @@ def do_display(self, arg): |
1437 | 1436 | Without expression, list all display expressions for the current frame. |
1438 | 1437 | """ |
1439 | 1438 | if not arg: |
1440 | | - self.message('Currently displaying:') |
1441 | | - for item in self.displaying.get(self.curframe, {}).items(): |
1442 | | - self.message('%s: %r' % item) |
| 1439 | + if self.displaying: |
| 1440 | + self.message('Currently displaying:') |
| 1441 | + for item in self.displaying.get(self.curframe, {}).items(): |
| 1442 | + self.message('%s: %r' % item) |
| 1443 | + else: |
| 1444 | + self.message('No expression is being displayed') |
1443 | 1445 | else: |
1444 | | - val = self._getval_except(arg) |
1445 | | - self.displaying.setdefault(self.curframe, {})[arg] = val |
1446 | | - self.message('display %s: %r' % (arg, val)) |
| 1446 | + val, exc = self._getval_except(arg) |
| 1447 | + if isinstance(exc, SyntaxError): |
| 1448 | + self.message('Unable to display %s: %r' % (arg, val)) |
| 1449 | + else: |
| 1450 | + self.displaying.setdefault(self.curframe, {})[arg] = val |
| 1451 | + self.message('display %s: %r' % (arg, val)) |
1447 | 1452 |
|
1448 | 1453 | complete_display = _complete_expression |
1449 | 1454 |
|
|