Re: [Kimchi-devel] [project-kimchi] [PATCH] Bug Fix: Get correct exception info when run unittest on Python2.6

On 07/09/2013 02:51 AM, Adam Litke wrote:
From: Bing Bu Cao <mars@linux.vnet.ibm.com>
When running unittest on SLES(python2.6), found a problem: If an exception occurs in body of 'with' statement, the 'exc_value' is a str not a exception object, 'raise firstException' will raise a TypeError. In this case, we will not get info of the first exception.
This is a bug on Python 2.6: http://bugs.python.org/issue7853
Reference: http://docs.python.org/2.7/library/stdtypes.html#context-manager-types
Signed-off-by: Bing Bu Cao <mars@linux.vnet.ibm.com> --- tests/utils.py | 15 ++++----------- 1 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/tests/utils.py b/tests/utils.py index debccfb..11c8bf4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -128,21 +128,14 @@ class RollbackContext(object): return self
def __exit__(self, exc_type, exc_value, traceback): - firstException = exc_value - for undo, args, kwargs in self._finally: try: undo(*args, **kwargs) except Exception as e: - # keep the earliest exception info - if not firstException: - firstException = e - # keep the original traceback info - traceback = sys.exc_info()[2] - - # re-raise the earliest exception - if firstException is not None: - raise firstException, None, traceback I don't think the proper solution is to delete the ability to raise the
On Thu, Jul 04, 2013 at 05:50:06PM +0800, caobbu@linux.vnet.ibm.com wrote: previous exception. To workaround the python bug you could just check the type of exc_value and only raise if it's an Exception. If it's a string you can just log it. not only string but also int.
should we still consider this patch. or we will not give up to support RollbackContext on some distros? $ ./run_tests.sh test_utils FE ====================================================================== ERROR: test_path_permission (test_utils.searchPermissionTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/user/kimchi/tests/test_utils.py", line 145, in test_path_permission break File "/home/user/kimchi/tests/utils.py", line 177, in __exit__ raise firstException, None, traceback TypeError: exceptions must be old-style classes or derived from BaseException, not int
+ traceback = sys.exc_info()[2] + raise e, None, traceback + + return False if exc_value is not None else True
def defer(self, func, *args, **kwargs): self._finally.append((func, args, kwargs)) -- 1.7.7.6
-- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
-- Thanks and best regards! Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com> IBM Linux Technology Center
participants (1)
-
Sheldon