Skip to content

Commit 5263ae0

Browse files
author
Martin Panter
committed
Use exception handler target variables rather than sys.exc_info()
In Python 3, saving the exception object manually will create a reference cycle via the traceback attribute. Using the exception handler method means the variable is automatically deleted, avoiding the reference cycle.
1 parent 79efbe6 commit 5263ae0

File tree

3 files changed

+10
-15
lines changed

3 files changed

+10
-15
lines changed

scripts/runxlrd.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,8 @@ def get_row_data(bk, sh, rowx, colrange):
8989
if cty == xlrd.XL_CELL_DATE:
9090
try:
9191
showval = xlrd.xldate_as_tuple(cval, dmode)
92-
except xlrd.XLDateError:
93-
e1, e2 = sys.exc_info()[:2]
94-
showval = "%s:%s" % (e1.__name__, e2)
92+
except xlrd.XLDateError as e:
93+
showval = "%s:%s" % (type(e).__name__, e)
9594
cty = xlrd.XL_CELL_ERROR
9695
elif cty == xlrd.XL_CELL_ERROR:
9796
showval = xlrd.error_text_from_code.get(cval, '<Unknown error code 0x%02x>' % cval)
@@ -335,17 +334,15 @@ def main(cmd_args):
335334
t1 = time.time()
336335
if not options.suppress_timing:
337336
print("Open took %.2f seconds" % (t1-t0,))
338-
except xlrd.XLRDError:
339-
e0, e1 = sys.exc_info()[:2]
340-
print("*** Open failed: %s: %s" % (e0.__name__, e1))
337+
except xlrd.XLRDError as e:
338+
print("*** Open failed: %s: %s" % (type(e).__name__, e))
341339
continue
342340
except KeyboardInterrupt:
343341
print("*** KeyboardInterrupt ***")
344342
traceback.print_exc(file=sys.stdout)
345343
sys.exit(1)
346-
except:
347-
e0, e1 = sys.exc_info()[:2]
348-
print("*** Open failed: %s: %s" % (e0.__name__, e1))
344+
except BaseException as e:
345+
print("*** Open failed: %s: %s" % (type(e).__name__, e))
349346
traceback.print_exc(file=sys.stdout)
350347
continue
351348
t0 = time.time()

xlrd/book.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -773,11 +773,10 @@ def derive_encoding(self):
773773
# we're well & truly stuffed -- let the punter know ASAP.
774774
try:
775775
_unused = unicode(b'trial', self.encoding)
776-
except:
777-
ei = sys.exc_info()[:2]
776+
except BaseException as e:
778777
fprintf(self.logfile,
779778
"ERROR *** codepage %r -> encoding %r -> %s: %s\n",
780-
self.codepage, self.encoding, ei[0].__name__.split(".")[-1], ei[1])
779+
self.codepage, self.encoding, type(e).__name__.split(".")[-1], e)
781780
raise
782781
if self.raw_user_name:
783782
strg = unpack_string(self.user_name, 0, self.encoding, lenlen=1)

xlrd/examples/xlrdnameAPIdemo.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,8 @@ def showable_cell_value(celltype, cellvalue, datemode):
7777
if celltype == xlrd.XL_CELL_DATE:
7878
try:
7979
showval = xlrd.xldate_as_tuple(cellvalue, datemode)
80-
except xlrd.XLDateError:
81-
e1, e2 = sys.exc_info()[:2]
82-
showval = "%s:%s" % (e1.__name__, e2)
80+
except xlrd.XLDateError as e:
81+
showval = "%s:%s" % (type(e).__name__, e)
8382
elif celltype == xlrd.XL_CELL_ERROR:
8483
showval = xlrd.error_text_from_code.get(
8584
cellvalue, '<Unknown error code 0x%02x>' % cellvalue)

0 commit comments

Comments
 (0)