-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathflake8_blind_except.py
41 lines (36 loc) · 1.56 KB
/
flake8_blind_except.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
try:
import pycodestyle
except ImportError:
import pep8 as pycodestyle
import re
__version__ = '0.2.1'
BLIND_EXCEPT_REGEX = re.compile(r'(^[ \t]*except(.*\b(Base)?Exception\b.*)?:)') # noqa
def check_blind_except(physical_line):
"""Check for blind except statements.
>>> check_blind_except('except:')
(0, 'B901 blind except: statement')
>>> check_blind_except('except Exception:')
(0, 'B902 blind except Exception: statement')
>>> check_blind_except('except Exception as exc:')
(0, 'B902 blind except Exception: statement')
>>> check_blind_except('except ValueError, Exception as exc:')
(0, 'B902 blind except Exception: statement')
>>> check_blind_except('except Exception, ValueError as exc:')
(0, 'B902 blind except Exception: statement')
>>> check_blind_except('except BaseException as exc:')
(0, 'B902 blind except Exception: statement')
>>> check_blind_except('except GoodException as exc: # except:')
>>> check_blind_except('except ExceptionGood as exc:')
>>> check_blind_except('except Exception') # only trigger with trailing colon
>>> check_blind_except('some code containing except: in string')
"""
if pycodestyle.noqa(physical_line):
return
match = BLIND_EXCEPT_REGEX.search(physical_line)
if match:
if match.group(2) is None:
return match.start(), 'B901 blind except: statement'
else:
return match.start(), 'B902 blind except Exception: statement'
check_blind_except.name = 'flake8-blind-except'
check_blind_except.version = __version__