summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--astroid/interpreter/objectmodel.py7
-rw-r--r--tests/unittest_object_model.py11
3 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d9e6b980..858c1195 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,10 @@ Release Date: TBA
* Added more supported parameters to ``subprocess.check_output``
+* Added exception inference for `UnicodeDecodeError`
+
+ Close PyCQA/pylint#3639
+
What's New in astroid 2.4.2?
============================
diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py
index 277c8250..10c659f6 100644
--- a/astroid/interpreter/objectmodel.py
+++ b/astroid/interpreter/objectmodel.py
@@ -659,9 +659,16 @@ class ImportErrorInstanceModel(ExceptionInstanceModel):
return node_classes.Const("")
+class UnicodeDecodeErrorInstanceModel(ExceptionInstanceModel):
+ @property
+ def attr_object(self):
+ return node_classes.Const("")
+
+
BUILTIN_EXCEPTIONS = {
"builtins.SyntaxError": SyntaxErrorInstanceModel,
"builtins.ImportError": ImportErrorInstanceModel,
+ "builtins.UnicodeDecodeError": UnicodeDecodeErrorInstanceModel,
# These are all similar to OSError in terms of attributes
"builtins.OSError": OSErrorInstanceModel,
"builtins.BlockingIOError": OSErrorInstanceModel,
diff --git a/tests/unittest_object_model.py b/tests/unittest_object_model.py
index 79c6afa4..5301a992 100644
--- a/tests/unittest_object_model.py
+++ b/tests/unittest_object_model.py
@@ -586,6 +586,17 @@ class ExceptionModelTest(unittest.TestCase):
assert isinstance(inferred, astroid.Const)
assert inferred.value == value
+ def test_unicodedecodeerror(self):
+ code = """
+ try:
+ raise UnicodeDecodeError("utf-8", "blob", 0, 1, "reason")
+ except UnicodeDecodeError as error:
+ error.object[:1] #@
+ """
+ node = builder.extract_node(code)
+ inferred = next(node.infer())
+ assert isinstance(inferred, astroid.Const)
+
def test_import_error(self):
ast_nodes = builder.extract_node(
"""