Improved error messaging when unexpected types are passed
diff --git a/asn1crypto/core.py b/asn1crypto/core.py
index f13a9b2..c071dc7 100644
--- a/asn1crypto/core.py
+++ b/asn1crypto/core.py
@@ -205,18 +205,18 @@
if tag_type is not None:
if tag_type not in ('implicit', 'explicit'):
- raise ValueError('tag_type is not one of "implicit", "explicit"')
+ raise ValueError('tag_type must be one of "implicit", "explicit" - is %s' % repr(tag_type))
self.tag_type = tag_type
if class_ is None:
class_ = 'context'
if class_ not in CLASS_NAME_TO_NUM_MAP:
- raise ValueError('class_ is not one of "universal", "application", "context", "private"')
+ raise ValueError('class_ must be one of "universal", "application", "context", "private" - is %s' % repr(class_))
class_ = CLASS_NAME_TO_NUM_MAP[class_]
if tag is not None:
if not isinstance(tag, int):
- raise ValueError('tag is not an integer')
+ raise ValueError('tag must be an integer, not %s' % tag.__class__.__name__)
if tag_type == 'implicit':
self.class_ = class_
@@ -227,7 +227,7 @@
else:
if class_ is not None:
if class_ not in CLASS_NUM_TO_NAME_MAP:
- raise ValueError('class_ is not one of "universal", "application", "context", "private"')
+ raise ValueError('class_ must be one of "universal", "application", "context", "private" - is %s' % repr(class_))
self.class_ = CLASS_NAME_TO_NUM_MAP[class_]
if tag is not None:
@@ -663,7 +663,7 @@
"""
if not isinstance(value, byte_cls):
- raise ValueError('%s value must be a byte string' % self.__class__.__name__)
+ raise ValueError('%s value must be a byte string, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
self.contents = value
@@ -691,7 +691,7 @@
"""
if not isinstance(value, str_cls):
- raise ValueError('%s value must be a unicode string' % self.__class__.__name__)
+ raise ValueError('%s value must be a unicode string, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
self.contents = value.encode(self._encoding)
@@ -858,7 +858,7 @@
"""
if not isinstance(value, int) and not isinstance(value, tuple):
- raise ValueError('%s value must be an integer or a tuple of ones and zeros' % self.__class__.__name__)
+ raise ValueError('%s value must be an integer or a tuple of ones and zeros, not %s' % (self.__class__.__name__, value.__class__.__name__))
if isinstance(value, tuple):
self._native = value
@@ -973,7 +973,7 @@
"""
if not isinstance(value, byte_cls):
- raise ValueError('%s value must be a byte string' % self.__class__.__name__)
+ raise ValueError('%s value must be a byte string, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
# Set the unused bits to 0
@@ -1070,7 +1070,7 @@
"""
if not isinstance(value, int):
- raise ValueError('%s value must be an integer' % self.__class__.__name__)
+ raise ValueError('%s value must be an integer, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
# Set the unused bits to 0
@@ -1192,7 +1192,7 @@
"""
if not isinstance(value, int):
- raise ValueError('%s value must be an integer' % self.__class__.__name__)
+ raise ValueError('%s value must be an integer, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
# Set the unused bits to 0
@@ -1270,7 +1270,7 @@
"""
if not isinstance(value, str_cls):
- raise ValueError('%s value must be a unicode string' % self.__class__.__name__)
+ raise ValueError('%s value must be a unicode string, not %s' % (self.__class__.__name__, value.__class__.__name__))
self._native = value
@@ -1390,7 +1390,7 @@
"""
if not isinstance(value, int) and not isinstance(value, str_cls):
- raise ValueError('%s value must be an integer or a unicode string' % self.__class__.__name__)
+ raise ValueError('%s value must be an integer or a unicode string, not %s' % (self.__class__.__name__, value.__class__.__name__))
if isinstance(value, str_cls):
if value not in self._reverse_map: