aboutsummaryrefslogtreecommitdiff
path: root/pyasn1/type
diff options
context:
space:
mode:
authorAlex Shafer <ashafer@pm.me>2019-06-29 00:20:15 -0600
committerIlya Etingof <etingof@gmail.com>2019-06-29 08:20:15 +0200
commitfe2725f8c80039d9d82af2bd3299abc174417c27 (patch)
treecb54020c6601951e656714c6bafc3a76faab4d4f /pyasn1/type
parentadf4c5b1ef11026102dad0bb77b54576e0ebd71c (diff)
downloadpyasn1-fe2725f8c80039d9d82af2bd3299abc174417c27.tar.gz
Add specific exceptions for String issues (#155)
This change helps telling unicode-related exceptions from other PyAsn1Error exceptions.
Diffstat (limited to 'pyasn1/type')
-rw-r--r--pyasn1/type/char.py24
-rw-r--r--pyasn1/type/univ.py24
2 files changed, 24 insertions, 24 deletions
diff --git a/pyasn1/type/char.py b/pyasn1/type/char.py
index 617b98d..03121a0 100644
--- a/pyasn1/type/char.py
+++ b/pyasn1/type/char.py
@@ -54,9 +54,9 @@ class AbstractCharacterString(univ.OctetString):
# `str` is Py2 text representation
return self._value.encode(self.encoding)
- except UnicodeEncodeError:
- raise error.PyAsn1Error(
- "Can't encode string '%s' with codec %s" % (self._value, self.encoding)
+ except UnicodeEncodeError as e:
+ raise error.PyAsn1StringEncodeError(
+ "Can't encode string '%s' with codec %s" % (self._value, self.encoding), e
)
def __unicode__(self):
@@ -75,9 +75,9 @@ class AbstractCharacterString(univ.OctetString):
else:
return unicode(value)
- except (UnicodeDecodeError, LookupError):
- raise error.PyAsn1Error(
- "Can't decode string '%s' with codec %s" % (value, self.encoding)
+ except (UnicodeDecodeError, LookupError) as e:
+ raise error.PyAsn1StringDecodeError(
+ "Can't decode string '%s' with codec %s" % (value, self.encoding), e
)
def asOctets(self, padding=True):
@@ -94,9 +94,9 @@ class AbstractCharacterString(univ.OctetString):
def __bytes__(self):
try:
return self._value.encode(self.encoding)
- except UnicodeEncodeError:
- raise error.PyAsn1Error(
- "Can't encode string '%s' with codec %s" % (self._value, self.encoding)
+ except UnicodeEncodeError as e:
+ raise error.PyAsn1StringEncodeError(
+ "Can't encode string '%s' with codec %s" % (self._value, self.encoding), e
)
def prettyIn(self, value):
@@ -112,9 +112,9 @@ class AbstractCharacterString(univ.OctetString):
else:
return str(value)
- except (UnicodeDecodeError, LookupError):
- raise error.PyAsn1Error(
- "Can't decode string '%s' with codec %s" % (value, self.encoding)
+ except (UnicodeDecodeError, LookupError) as e:
+ raise error.PyAsn1StringDecodeError(
+ "Can't decode string '%s' with codec %s" % (value, self.encoding), e
)
def asOctets(self, padding=True):
diff --git a/pyasn1/type/univ.py b/pyasn1/type/univ.py
index 4c8c8e4..7d88957 100644
--- a/pyasn1/type/univ.py
+++ b/pyasn1/type/univ.py
@@ -825,9 +825,9 @@ class OctetString(base.AbstractSimpleAsn1Item):
elif isinstance(value, unicode):
try:
return value.encode(self.encoding)
- except (LookupError, UnicodeEncodeError):
- raise error.PyAsn1Error(
- "Can't encode string '%s' with codec %s" % (value, self.encoding)
+ except (LookupError, UnicodeEncodeError) as e:
+ raise error.PyAsn1StringEncodeError(
+ "Can't encode string '%s' with codec %s" % (value, self.encoding), e
)
elif isinstance(value, (tuple, list)):
try:
@@ -846,9 +846,9 @@ class OctetString(base.AbstractSimpleAsn1Item):
try:
return self._value.decode(self.encoding)
- except UnicodeDecodeError:
- raise error.PyAsn1Error(
- "Can't decode string '%s' with codec %s" % (self._value, self.encoding)
+ except UnicodeDecodeError as e:
+ raise error.PyAsn1StringDecodeError(
+ "Can't decode string '%s' with codec %s" % (self._value, self.encoding), e
)
def asOctets(self):
@@ -864,9 +864,9 @@ class OctetString(base.AbstractSimpleAsn1Item):
elif isinstance(value, str):
try:
return value.encode(self.encoding)
- except UnicodeEncodeError:
- raise error.PyAsn1Error(
- "Can't encode string '%s' with '%s' codec" % (value, self.encoding)
+ except UnicodeEncodeError as e:
+ raise error.PyAsn1StringEncodeError(
+ "Can't encode string '%s' with '%s' codec" % (value, self.encoding), e
)
elif isinstance(value, OctetString): # a shortcut, bytes() would work the same way
return value.asOctets()
@@ -881,9 +881,9 @@ class OctetString(base.AbstractSimpleAsn1Item):
try:
return self._value.decode(self.encoding)
- except UnicodeDecodeError:
- raise error.PyAsn1Error(
- "Can't decode string '%s' with '%s' codec at '%s'" % (self._value, self.encoding, self.__class__.__name__)
+ except UnicodeDecodeError as e:
+ raise error.PyAsn1StringDecodeError(
+ "Can't decode string '%s' with '%s' codec at '%s'" % (self._value, self.encoding, self.__class__.__name__), e
)
def __bytes__(self):