# What's New In Pylint 1.9

Release: | 1.9
Date: | 2018-05-15

## 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.