| |
| PyChecker is a tool for finding bugs in python source code. |
| It finds problems that are typically caught by a compiler for less |
| dynamic languages, like C and C++. It is similar to lint. |
| Because of the dynamic nature of python, some warnings |
| may be incorrect; however, spurious warnings should be fairly infrequent. |
| |
| PyChecker works in a combination of ways. First, it imports each |
| module. If there is an import error, the module cannot be processed. |
| The import provides some basic information about the module. The code |
| for each function, class, and method is checked for possible problems. |
| |
| Types of problems that can be found include: |
| |
| * No global found (e.g., using a module without importing it) |
| * Passing the wrong number of parameters to functions/methods/constructors |
| * Passing the wrong number of parameters to builtin functions & methods |
| * Using format strings that don't match arguments |
| * Using class methods and attributes that don't exist |
| * Changing signature when overriding a method |
| * Redefining a function/class/method in the same scope |
| * Using a variable before setting it |
| * self not the first parameter to a method |
| * Unused globals and locals (module or variable) |
| * Unused function/method arguments (can ignore self) |
| * No doc strings in modules, classes, functions, and methods |
| |
| Using PyChecker |
| --------------- |
| To use PyChecker, pass the python source files you want to check |
| on the command line: |
| |
| pychecker file1.py file2.py ... |
| |
| Note: On Windows, use pychecker.bat. You may also need to add |
| python/scripts to your PATH. |
| |
| pychecker and pychecker.bat will only exist if pychecker has been |
| installed. To install, do: python setup.py install |
| |
| Note: If you haven't installed pychecker, it can be run by doing: |
| python pychecker/checker.py |
| |
| An alternate way to use PyChecker is to import it in your code. |
| See 'Importing PyChecker' below for more details. |
| |
| If there are import dependencies in your source files, you should |
| import those files first on the command line in order to get as many |
| files checked as possible. |
| |
| PyChecker works with Python 2.0 through 2.3. |
| Some features don't work on earlier versions of Python. |
| I only regularly test with versions 2.2 and 2.3. |
| |
| You can use the test files as examples: |
| |
| pychecker [options] test_input/*.py |
| |
| If you want to change the default behaviour, you can pass command line options |
| or define a .pycheckrc file. For an example, look at pycheckrc. |
| |
| To show the available options, do: |
| |
| pychecker -h |
| |
| Some of the most common options are: |
| |
| --only only warn about files passed on the command line [off] |
| -#, --limit the maximum number of warnings to be displayed [10] |
| -s, --shadowbuiltin check if a variable shadows a builtin [on] |
| -q, --stdlib ignore warnings from files under standard library [off] |
| -T, --argsused unused method/function arguments [on] |
| |
| There is a simple GUI which is not maintained much. It is good |
| for showing all the options and also allows you to run pychecker. |
| To run options, you will need to start it manually: |
| |
| python pychecker/options.py |
| |
| If you want to suppress warnings on a module/function/class/method, |
| you can define a suppressions dictionary in .pycheckrc. |
| Examples of keys are: 'module', 'module.function', |
| 'module.class', 'module.class.method', etc. |
| |
| You can also define suppressions in your code by doing: |
| |
| __pychecker__ = 'no-namedargs maxreturns=0 unusednames=foo,bar' |
| |
| The format for __pychecker__ values and values in the suppressions dictionary |
| are the same. Dashes (--) are optional when preceding long option names. |
| |
| Importing PyChecker |
| ------------------- |
| You can import PyChecker in your code's main module, by doing: |
| |
| import pychecker.checker |
| |
| This will allow each module imported after PyChecker to be checked |
| (other than the main module). NOTE: Modules imported before PyChecker |
| will not be checked. Warnings will be displayed on stdout |
| (ie, PyChecker uses print). |
| |
| Since you can't pass command line parameters, you can do: |
| |
| os.environ['PYCHECKER'] = 'command line options here' |
| |
| This is equivalent of setting PYCHECKER in the shell environment: |
| |
| PYCHECKER='no-namedargs maxreturns=0' /path/to/your/program |
| |
| If you want to disable the warnings (and processing done by PyChecker), |
| prior to importing PyChecker, do: |
| |
| os.environ['PYCHECKER_DISABLED'] = 1 |
| |
| This is equivalent of setting PYCHECKER_DISABLED in the shell environment: |
| |
| PYCHECKER_DISABLED=1 /path/to/your/program |
| |
| Internal Errors |
| --------------- |
| If you find a bug in PyChecker, meaning you see something like: |
| |
| pychecker myfile.py |
| |
| myfile.py:13 INTERNAL ERROR -- STOPPED PROCESSING FUNCTION -- |
| Traceback (most recent call last): |
| File "./pychecker/warn.py", line 364, in _checkFunction |
| stack, oparg, lastLineNum) |
| File "./pychecker/warn.py", line 195, in _handleFunctionCall |
| kwArgs.append(stack[i].data) |
| IndexError: list index out of range |
| |
| Please post a bug in the SourceForge Tracker |
| (https://sourceforge.net/tracker/?atid=382217&group_id=24686&func=browse) |
| or send mail indicating the version of PyChecker, *your source file* |
| which broke PyChecker (myfile.py in the example above), and the traceback. |
| It is very helpful to provide a simple test case to demonstrate the problem. |
| It helps to have the entire file and all the dependencies if you cannot |
| produce a simple test case. But if you can't provide a test case nor |
| the file(s), I may be able to figure out the problem with just the line |
| which broke PyChecker (myfile.py:13 in the example above). |
| |
| Good Luck! As always, feedback is greatly appreciated. |
| |
| Neal |
| pychecker-list@lists.sourceforge.net |
| |
| PyChecker can be found on SourceForge at: |
| http://pychecker.sourceforge.net/ |
| http://sourceforge.net/projects/pychecker |
| |