pydiatra is yet another static checker for Python code.

The following checks are implemented:

  • embedded code copies
  • except shadowing builtins (e.g. except IOError, OSError:, which overwrites OSError)
  • bare except (i.e. except:)
  • hardcoded errno values (e.g. exc.errno == 2 instead of exc.errno == errno.ENOENT)
  • inconsistent use of tabs and spaces in indentation
  • mkstemp() file descriptor leaks (e.g. path = tempfile.mkstemp()[1])
  • obsolete PIL imports (e.g. import Image instead of from PIL import Image)
  • regular expression syntax errors
  • misplaced flags arguments in re.split(), re.sub(), re.subn()
  • dubious or deprecated constructs in regular expressions:
    • duplicate range (e.g. re.compile("[aa]"))
    • overlapping ranges (e.g. re.compile("[a-zA-z]"))
    • bad escape sequences (e.g. re.compile(r"\eggs"))
    • misplaced inline flags (e.g. re.compile("eggs(?i)"); Python 3.6+ only)
    • combining incompatible flags
    • redundant flags
  • string exceptions (e.g. raise "eggs" or except "ham":)
  • string formatting errors
  • comparisons with sys.version or sys.hexversion
  • Python syntax errors
  • Python syntax warnings
    • assertions that are always true
    • syntactic constructs that are no longer supported in Python 3
    • ill-formed assignments to global variables
    • use of async and await as names
    • invalid escape sequences in strings (Python 3.6+ only)
Author: Jakub Wilk

License: The Expat license

Version: 0.12.7 released on 2022-05-16