Summary -- Release highlights

  • None so far

New checkers

  • A new Python 3 checker was added to warn about the removed operator.div function.

  • A new Python 3 checker was added to warn about accessing functions that have been moved from the urllib module in corresponding subpackages, such as urllib.request.

    from urllib import urlencode
    

    Instead the previous code should use urllib.parse or six.moves to import a module in a Python 2 and 3 compatible fashion:

    from six.moves.urllib.parse import urlencode
    

    To have this working on Python 3 as well, please use the six library:

    six.reraise(Exception, "value", tb)
    
  • A new check was added to warn about using unicode raw string literals. This is a syntax error in Python 3:

    a = ur'...'
    
  • Added a new deprecated-sys-function check, emitted when accessing removed sys members.

  • Added xreadlines-attribute check, emitted when the xreadlines() attribute is accessed on a file object.

  • Added two new Python 3 porting checks, exception-escape and comprehension-escape

    These two are emitted whenever pylint detects that a variable defined in the said blocks is used outside of the given block. On Python 3 these values are deleted.

    try:
      1/0
    except ZeroDivisionError as exc:
       ...
    print(exc) # This will raise a NameError on Python 3
    
    [i for i in some_iterator if some_condition(i)]
    print(i) # This will raise a NameError on Python 3
    

Other Changes

  • defaultdict and subclasses of dict are now handled for dict-iter-* checks. That means that the following code will now emit warnings for when iteritems and friends are accessed:

    some_dict = defaultdict(list)
    ...
    some_dict.iterkeys()
    
  • Enum classes no longer trigger too-few-methods

  • Special methods now count towards too-few-methods, and are considered part of the public API. They are still not counted towards the number of methods for too-many-methods.

  • docparams allows abstract methods to document returns documentation even if the default implementation does not return something. They also no longer need to document raising a NotImplementedError.