diff --git a/pylint_odoo/checkers/modules_odoo.py b/pylint_odoo/checkers/modules_odoo.py index 6166ee2e..d93eda22 100644 --- a/pylint_odoo/checkers/modules_odoo.py +++ b/pylint_odoo/checkers/modules_odoo.py @@ -117,6 +117,12 @@ 'missing-manifest-dependency', settings.DESC_DFLT ), + 'W%d38' % settings.BASE_OMODULE_ID: ( + 'pass into block except. ' + 'If you really need to use the pass consider logging that exception', + 'except-pass', + settings.DESC_DFLT + ), 'W%d37' % settings.BASE_OMODULE_ID: ( '%s The xml attribute is missing the translation="off" tag %s', 'xml-attribute-translatable', @@ -351,6 +357,15 @@ def visit_import(self, node): if isinstance(node.scope(), astroid.Module): self._check_imported_packages(node, name) + @utils.check_messages('except-pass') + def visit_tryexcept(self, node): + """Visit block try except""" + for handler in node.handlers: + if (not handler.name and + len(handler.body) == 1 and + isinstance(handler.body[0], astroid.node_classes.Pass)): + self.add_message('except-pass', node=handler) + def _check_rst_syntax_error(self): """Check if rst file there is syntax error :return: False if exists errors and diff --git a/pylint_odoo/test/main.py b/pylint_odoo/test/main.py index a6ce4dc4..0cfc543c 100644 --- a/pylint_odoo/test/main.py +++ b/pylint_odoo/test/main.py @@ -58,6 +58,7 @@ 'wrong-tabs-instead-of-spaces': 2, 'eval-referenced': 5, 'xml-syntax-error': 2, + 'except-pass': 3, 'attribute-string-redundant': 33, 'renamed-field-parameter': 2, 'xml-attribute-translatable': 1, diff --git a/pylint_odoo/test_repo/test_module/except_pass.py b/pylint_odoo/test_repo/test_module/except_pass.py new file mode 100644 index 00000000..b259d101 --- /dev/null +++ b/pylint_odoo/test_repo/test_module/except_pass.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +"""Test Except Pass usage""" + + +class TestExceptPass(object): + """Test Except Pass class """ + + def test_method(self): + """Test method """ + try: + raise Exception('Exception') + except Exception: # except-pass + pass + + def test_2_method(self): + """Test 2 method """ + try: + raise Exception('Exception') + except Exception: + pass + print('Exception') + + def test_3_method(self): + """Test 3 method """ + try: + raise Exception('Exception') + except Exception as exception: + pass + if exception: + pass + + def test_4_method(self): + try: + raise Exception('Exception') + except Exception, userError: + pass + if userError: + pass + + def test_5_method(self): + try: + raise Exception('Exception') + except (Exception, IndexError) as exception: + pass + if exception: + pass + + def test_6_method(self): + try: + raise Exception('Exception') + except (Exception, IndexError): # except-pass + pass + + def test_7_method(self): + try: + raise Exception('Exception') + except (Exception, IndexError, NameError), exception: + pass + except Exception: # except-pass + pass + if exception: + pass