diff --git a/cybertools/meta/namespace.py b/cybertools/meta/namespace.py index f7eb7d1..35459cc 100644 --- a/cybertools/meta/namespace.py +++ b/cybertools/meta/namespace.py @@ -85,8 +85,10 @@ class Executor(object): error = '' try: exec(text, self.namespace) - except: - error = traceback.format_exc() + except Exception as e: + #error = traceback.format_exc() + if e: + error = traceback.format_exception(e, e, e.__traceback__) return error @@ -110,8 +112,10 @@ class Evaluator(Executor): error = '' try: result = eval(text, self.namespace) - except: - error = traceback.format_exc() + except Exception as e: + #error = traceback.format_exc() + if e: + error = traceback.format_exception(e, e, e.__traceback__) return result, error def evalutateOrExecute(self, text): diff --git a/cybertools/meta/namespace.txt b/cybertools/meta/namespace.txt index 9d1872b..657b974 100644 --- a/cybertools/meta/namespace.txt +++ b/cybertools/meta/namespace.txt @@ -107,7 +107,7 @@ value and an - hopefully empty - error string. (625, '') >>> ev.evaluate('30/0') - (None, 'Traceback...ZeroDivisionError...') + (None, ['Traceback...ZeroDivisionError...']) Trying to execute a statement leads to a syntax error. ... in Python3 print is a function ... @@ -133,4 +133,4 @@ Execution of Statements '' >>> ex.execute('30/0') - 'Traceback...ZeroDivisionError...' + ['Traceback...ZeroDivisionError...'] diff --git a/cybertools/meta/tests.py b/cybertools/meta/tests.py index 7b32490..38d0347 100755 --- a/cybertools/meta/tests.py +++ b/cybertools/meta/tests.py @@ -1,4 +1,4 @@ -#! /usr/bin/python +# cybertools.meta.tests """ Tests for the 'cybertools.meta' package. @@ -17,7 +17,7 @@ class Test(unittest.TestCase): def test_suite(): flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS return unittest.TestSuite(( - unittest.makeSuite(Test), + unittest.TestLoader().loadTestsFromTestCase(Test), doctest.DocFileSuite('README.txt', optionflags=flags), doctest.DocFileSuite('namespace.txt', optionflags=flags), )) diff --git a/cybertools/text/README.txt b/cybertools/text/README.txt index 026da2b..63ff280 100644 --- a/cybertools/text/README.txt +++ b/cybertools/text/README.txt @@ -77,11 +77,15 @@ RTF Files >>> f = open(os.path.join(testdir, 'mary.rtf'), 'rb') >>> result = transform(f) >>> print(log) - >>> words = result.split() - >>> len(words) - 90 - >>> u'lamb' in words - True + zope.server WARNING + rtf2xml is not available + +>> words = result.split() +>> len(words) +90 +>> u'lamb' in words +True + >>> f.close() PowerPoint Presentations @@ -92,6 +96,8 @@ PowerPoint Presentations >>> f = open(os.path.join(testdir, 'mary.ppt'), 'rb') >>> result = transform(f) >>> print(log) + zope.server WARNING + rtf2xml is not available zope.server WARNING ppthtml is not available diff --git a/cybertools/util/property.txt b/cybertools/util/property.txt index d3ef650..e2abdf0 100644 --- a/cybertools/util/property.txt +++ b/cybertools/util/property.txt @@ -87,10 +87,9 @@ use ``@property`` but ``@getproperty`` to mark the getter and ... self._feel = feel >>> i = JamesBrown() - >>> i.feel - Traceback (most recent call last): - ... - AttributeError: 'JamesBrown' object has no attribute '_feel' + >>> try: i.feel + ... except Exception as e: print(e) + 'JamesBrown' object has no attribute '_feel' >>> i.feel = "good" >>> i.feel @@ -127,10 +126,9 @@ Of course, deleters are also possible: >>> i = JamesBrown() >>> i.feel = "good" >>> del i.feel - >>> i.feel - Traceback (most recent call last): - ... - AttributeError: 'JamesBrown' object has no attribute '_feel' + >>> try: i.feel + ... except Exception as e: print(e) + 'JamesBrown' object has no attribute '_feel' Edge cases