From fc10c68fabf184116aaf1915e41a4f5fd21a4a27 Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Wed, 31 Jul 2019 21:26:37 +0200 Subject: Remove a couple of `except as` statements to benefit old Pythons --- pyasn1/type/char.py | 2 +- pyasn1/type/univ.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/pyasn1/type/char.py b/pyasn1/type/char.py index 9cba4db..3f8c444 100644 --- a/pyasn1/type/char.py +++ b/pyasn1/type/char.py @@ -81,7 +81,7 @@ class AbstractCharacterString(univ.OctetString): else: return unicode(value) - except (UnicodeDecodeError, LookupError) as exc: + except (UnicodeDecodeError, LookupError): exc = sys.exc_info()[1] raise error.PyAsn1UnicodeDecodeError( "Can't decode string '%s' with codec " diff --git a/pyasn1/type/univ.py b/pyasn1/type/univ.py index 7715727..86e9855 100644 --- a/pyasn1/type/univ.py +++ b/pyasn1/type/univ.py @@ -832,22 +832,27 @@ class OctetString(base.SimpleAsn1Type): def prettyIn(self, value): if isinstance(value, str): return value + elif isinstance(value, unicode): try: return value.encode(self.encoding) + except (LookupError, UnicodeEncodeError): exc = sys.exc_info()[1] raise error.PyAsn1UnicodeEncodeError( "Can't encode string '%s' with codec " "%s" % (value, self.encoding), exc ) + elif isinstance(value, (tuple, list)): try: return ''.join([chr(x) for x in value]) + except ValueError: raise error.PyAsn1Error( "Bad %s initializer '%s'" % (self.__class__.__name__, value) ) + else: return str(value) @@ -875,19 +880,26 @@ class OctetString(base.SimpleAsn1Type): def prettyIn(self, value): if isinstance(value, bytes): return value + elif isinstance(value, str): try: return value.encode(self.encoding) - except UnicodeEncodeError as e: + + except UnicodeEncodeError: + exc = sys.exc_info()[1] raise error.PyAsn1UnicodeEncodeError( - "Can't encode string '%s' with '%s' codec" % (value, self.encoding), e + "Can't encode string '%s' with '%s' " + "codec" % (value, self.encoding), exc ) elif isinstance(value, OctetString): # a shortcut, bytes() would work the same way return value.asOctets() + elif isinstance(value, base.SimpleAsn1Type): # this mostly targets Integer objects return self.prettyIn(str(value)) + elif isinstance(value, (tuple, list)): return self.prettyIn(bytes(value)) + else: return bytes(value) -- cgit v1.2.1