diff options
| -rw-r--r-- | ChangeLog | 4 | ||||
| -rw-r--r-- | astroid/interpreter/objectmodel.py | 7 | ||||
| -rw-r--r-- | tests/unittest_object_model.py | 11 |
3 files changed, 22 insertions, 0 deletions
@@ -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( """ |
