]> granicus.if.org Git - python/commitdiff
bpo-29762: More use "raise from None". (#569)
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 5 Apr 2017 06:37:24 +0000 (09:37 +0300)
committerGitHub <noreply@github.com>
Wed, 5 Apr 2017 06:37:24 +0000 (09:37 +0300)
This hides unwanted implementation details from tracebacks.

30 files changed:
Lib/_collections_abc.py
Lib/_weakrefset.py
Lib/aifc.py
Lib/asyncio/base_events.py
Lib/bdb.py
Lib/chunk.py
Lib/configparser.py
Lib/copyreg.py
Lib/difflib.py
Lib/dis.py
Lib/json/decoder.py
Lib/json/scanner.py
Lib/lib2to3/patcomp.py
Lib/lib2to3/pgen2/literals.py
Lib/lib2to3/refactor.py
Lib/locale.py
Lib/mailbox.py
Lib/multiprocessing/context.py
Lib/multiprocessing/pool.py
Lib/multiprocessing/process.py
Lib/netrc.py
Lib/nntplib.py
Lib/pickle.py
Lib/shutil.py
Lib/sysconfig.py
Lib/warnings.py
Lib/xml/dom/xmlbuilder.py
Lib/xml/etree/ElementPath.py
Tools/freeze/winmakemakefile.py
Tools/pynche/ColorDB.py

index 005d884572465f261f9f6186a4e5817f8754df92..e89e84bc08112738cf57fecb8ddd71c6eede700c 100644 (file)
@@ -589,7 +589,7 @@ class MutableSet(Set):
         try:
             value = next(it)
         except StopIteration:
-            raise KeyError
+            raise KeyError from None
         self.discard(value)
         return value
 
@@ -808,7 +808,7 @@ class MutableMapping(Mapping):
         try:
             key = next(iter(self))
         except StopIteration:
-            raise KeyError
+            raise KeyError from None
         value = self[key]
         del self[key]
         return key, value
index 7f9923c6341a54398e346d95f988222dbd8016b0..4d0de8ce753ab4f984bcedc91cb1712ef9e1f137 100644 (file)
@@ -98,7 +98,7 @@ class WeakSet:
             try:
                 itemref = self.data.pop()
             except KeyError:
-                raise KeyError('pop from empty WeakSet')
+                raise KeyError('pop from empty WeakSet') from None
             item = itemref()
             if item is not None:
                 return item
index 13ad7dc5ca3d62d20dd6500053af77298d52eccf..49a456a893ff2ef9c9fd32ee042c51b102e2596e 100644 (file)
@@ -149,25 +149,25 @@ def _read_long(file):
     try:
         return struct.unpack('>l', file.read(4))[0]
     except struct.error:
-        raise EOFError
+        raise EOFError from None
 
 def _read_ulong(file):
     try:
         return struct.unpack('>L', file.read(4))[0]
     except struct.error:
-        raise EOFError
+        raise EOFError from None
 
 def _read_short(file):
     try:
         return struct.unpack('>h', file.read(2))[0]
     except struct.error:
-        raise EOFError
+        raise EOFError from None
 
 def _read_ushort(file):
     try:
         return struct.unpack('>H', file.read(2))[0]
     except struct.error:
-        raise EOFError
+        raise EOFError from None
 
 def _read_string(file):
     length = ord(file.read(1))
index ee34996c8aa23fb8dce23ce3dbd303d69565d347..f94ec9275a17cb34d4b05d827dc2d649db344069 100644 (file)
@@ -1043,7 +1043,7 @@ class BaseEventLoop(events.AbstractEventLoop):
                     except OSError as err:
                         raise OSError(err.errno, 'error while attempting '
                                       'to bind on address %r: %s'
-                                      % (sa, err.strerror.lower()))
+                                      % (sa, err.strerror.lower())) from None
                 completed = True
             finally:
                 if not completed:
index 67a08463fa1bd358d83c6a6a60e5740c12537e89..5a80fa8ba537d5cdb62b0aacdcc3e7a0a5f52a22 100644 (file)
@@ -336,11 +336,11 @@ class Bdb:
         try:
             number = int(arg)
         except ValueError:
-            raise ValueError('Non-numeric breakpoint number %s' % arg)
+            raise ValueError('Non-numeric breakpoint number %s' % arg) from None
         try:
             bp = Breakpoint.bpbynumber[number]
         except IndexError:
-            raise ValueError('Breakpoint number %d out of range' % number)
+            raise ValueError('Breakpoint number %d out of range' % number) from None
         if bp is None:
             raise ValueError('Breakpoint %d already deleted' % number)
         return bp
index d94dd398074a60f53cf08aaf1fad02383985192d..870c39fe7f5037152dd5b430e6b6f3f7e5d7a8de 100644 (file)
@@ -64,7 +64,7 @@ class Chunk:
         try:
             self.chunksize = struct.unpack_from(strflag+'L', file.read(4))[0]
         except struct.error:
-            raise EOFError
+            raise EOFError from None
         if inclheader:
             self.chunksize = self.chunksize - 8 # subtract header
         self.size_read = 0
index 230ab2b017eade3c35c9738a53e2a60c0015005f..ea971f3933859a0c3cc15e4e66764e6038da18e4 100644 (file)
@@ -1138,7 +1138,7 @@ class RawConfigParser(MutableMapping):
             sectiondict = self._sections[section]
         except KeyError:
             if section != self.default_section:
-                raise NoSectionError(section)
+                raise NoSectionError(section) from None
         # Update with the entry specific variables
         vardict = {}
         if vars:
index 67f5bb029ee8f12e414130a7c5ef19c82199b2ff..ed29d719def30e9e81a1d207bbf4f19787cad0d7 100644 (file)
@@ -70,7 +70,7 @@ def _reduce_ex(self, proto):
     except AttributeError:
         if getattr(self, "__slots__", None):
             raise TypeError("a class that defines __slots__ without "
-                            "defining __getstate__ cannot be pickled")
+                            "defining __getstate__ cannot be pickled") from None
         try:
             dict = self.__dict__
         except AttributeError:
index 2095a5e517cb8bf34b7dfd79604225946bf97132..82964719dc8333bbd6e6d180079fde3afa45debf 100644 (file)
@@ -2079,7 +2079,7 @@ def restore(delta, which):
         tag = {1: "- ", 2: "+ "}[int(which)]
     except KeyError:
         raise ValueError('unknown delta choice (must be 1 or 2): %r'
-                           % which)
+                           % which) from None
     prefixes = ("  ", tag)
     for line in delta:
         if line[:2] in prefixes:
index 0794b7f743b01de50c1575aceff7cab17918395b..f93d5b22d465c87b8a9362526e6cb468603a97df 100644 (file)
@@ -72,7 +72,7 @@ def distb(tb=None, *, file=None):
         try:
             tb = sys.last_traceback
         except AttributeError:
-            raise RuntimeError("no last traceback to disassemble")
+            raise RuntimeError("no last traceback to disassemble") from None
         while tb.tb_next: tb = tb.tb_next
     disassemble(tb.tb_frame.f_code, tb.tb_lasti, file=file)
 
index 2422c6ac102a64f9ff68b2acd1ed9704332cde75..3741deed7d52f57a38c9a49fa3d72b8ee3bcafc6 100644 (file)
@@ -103,7 +103,8 @@ def py_scanstring(s, end, strict=True,
         try:
             esc = s[end]
         except IndexError:
-            raise JSONDecodeError("Unterminated string starting at", s, begin)
+            raise JSONDecodeError("Unterminated string starting at",
+                                  s, begin) from None
         # If not a unicode escape sequence, must be in the lookup table
         if esc != 'u':
             try:
index 86426cde1a72c065f8dffcc8033747ca103e2515..c451ebab58425558fdcae432a8a75bd161d76738 100644 (file)
@@ -29,7 +29,7 @@ def py_make_scanner(context):
         try:
             nextchar = string[idx]
         except IndexError:
-            raise StopIteration(idx)
+            raise StopIteration(idx) from None
 
         if nextchar == '"':
             return parse_string(string, idx + 1, strict)
index 06a4b9dd230e36fec3ec6c188064a2e8d1c4045f..0fefa9a3a428e83716cea6ebc76bcc6734eefa37 100644 (file)
@@ -59,7 +59,7 @@ class PatternCompiler(object):
         try:
             root = self.driver.parse_tokens(tokens, debug=debug)
         except parse.ParseError as e:
-            raise PatternSyntaxError(str(e))
+            raise PatternSyntaxError(str(e)) from None
         if with_tree:
             return self.compile_node(root), root
         else:
index 4f50d31e6baf921757a757c41aafa6eca9d360d8..b9b63e6e5572c1bc35526c6126db2b31b798d270 100644 (file)
@@ -29,12 +29,12 @@ def escape(m):
         try:
             i = int(hexes, 16)
         except ValueError:
-            raise ValueError("invalid hex string escape ('\\%s')" % tail)
+            raise ValueError("invalid hex string escape ('\\%s')" % tail) from None
     else:
         try:
             i = int(tail, 8)
         except ValueError:
-            raise ValueError("invalid octal string escape ('\\%s')" % tail)
+            raise ValueError("invalid octal string escape ('\\%s')" % tail) from None
     return chr(i)
 
 def evalString(s):
index c5a1aa2d0cc423c1789d08d65e6917e0cdf1f460..70b2a002fbf3e4188664469d86c00480c30a072d 100644 (file)
@@ -248,7 +248,7 @@ class RefactoringTool(object):
             try:
                 fix_class = getattr(mod, class_name)
             except AttributeError:
-                raise FixerError("Can't find %s.%s" % (fix_name, class_name))
+                raise FixerError("Can't find %s.%s" % (fix_name, class_name)) from None
             fixer = fix_class(self.options, self.fixer_log)
             if fixer.explicit and self.explicit is not True and \
                     fix_mod_path not in self.explicit:
index 73fc94d936a8d9c84de1497e58c29aa86383c667..5763b14c9dbb320d721b038f4392a70204637252 100644 (file)
@@ -512,7 +512,8 @@ def _build_localename(localetuple):
         else:
             return language + '.' + encoding
     except (TypeError, ValueError):
-        raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.')
+        raise TypeError('Locale must be None, a string, or an iterable of '
+                        'two strings -- language code, encoding.') from None
 
 def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
 
index 39f24f9a7239dc24613f23e0b70eb8ae97002bfd..056251dce0ada3c066f9c0b51272be0004de367b 100644 (file)
@@ -555,7 +555,7 @@ class Maildir(Mailbox):
         try:
             return self._toc[key]
         except KeyError:
-            raise KeyError('No message with key: %s' % key)
+            raise KeyError('No message with key: %s' % key) from None
 
     # This method is for backward compatibility only.
     def next(self):
@@ -741,7 +741,7 @@ class _singlefileMailbox(Mailbox):
             try:
                 return self._toc[key]
             except KeyError:
-                raise KeyError('No message with key: %s' % key)
+                raise KeyError('No message with key: %s' % key) from None
 
     def _append_message(self, message):
         """Append message to mailbox and return (start, stop) offsets."""
@@ -1572,7 +1572,7 @@ class MaildirMessage(Message):
         try:
             self._date = float(date)
         except ValueError:
-            raise TypeError("can't convert to float: %s" % date)
+            raise TypeError("can't convert to float: %s" % date) from None
 
     def get_info(self):
         """Get the message's "info" as a string."""
index 623f6fb733a57f5aa08939033b46037cd3eae1c6..a3d491bde5a7dda63bf43d63acca8ca45dd6742d 100644 (file)
@@ -189,7 +189,7 @@ class BaseContext(object):
         try:
             ctx = _concrete_contexts[method]
         except KeyError:
-            raise ValueError('cannot find context for %r' % method)
+            raise ValueError('cannot find context for %r' % method) from None
         ctx._check_available()
         return ctx
 
index a545f3c1a189613b9d95bf9a921c1c2abd80692c..c2364ab186c328205d957b7c2dafd40f1dc751e4 100644 (file)
@@ -720,14 +720,14 @@ class IMapIterator(object):
                 item = self._items.popleft()
             except IndexError:
                 if self._index == self._length:
-                    raise StopIteration
+                    raise StopIteration from None
                 self._cond.wait(timeout)
                 try:
                     item = self._items.popleft()
                 except IndexError:
                     if self._index == self._length:
-                        raise StopIteration
-                    raise TimeoutError
+                        raise StopIteration from None
+                    raise TimeoutError from None
 
         success, value = item
         if success:
index bca8b7a0047070f054f3bd6ecfb256e709e20e5c..37365f2e42cb690c8f5be70b236ddd4afc0c196d 100644 (file)
@@ -199,7 +199,7 @@ class BaseProcess(object):
         try:
             return self._sentinel
         except AttributeError:
-            raise ValueError("process not started")
+            raise ValueError("process not started") from None
 
     def __repr__(self):
         if self is _current_process:
index bbb3d23b5433433ec89c07dfb6a7ddbd5027e9ec..aa8eea3c4ddecae6549f6d6637fd469331cbc88f 100644 (file)
@@ -26,7 +26,7 @@ class netrc:
             try:
                 file = os.path.join(os.environ['HOME'], ".netrc")
             except KeyError:
-                raise OSError("Could not find .netrc: $HOME is not set")
+                raise OSError("Could not find .netrc: $HOME is not set") from None
         self.hosts = {}
         self.macros = {}
         with open(file) as fp:
index 28cd0992dd4785bb86c009e50fe05ae4e553d7f4..5961a28ab7d9bc9a4ebd6348e51e36de65440b8b 100644 (file)
@@ -866,7 +866,7 @@ class _NNTPBase:
         try:
             [resp_num, path] = resp.split()
         except ValueError:
-            raise NNTPReplyError(resp)
+            raise NNTPReplyError(resp) from None
         else:
             return resp, path
 
index 702b0b35cebdb70b63acb3165a6d1a34dcd1eece..faa8fd7e557f9c2a92e9b88eab278f75e140a5a7 100644 (file)
@@ -269,7 +269,7 @@ def _getattribute(obj, name):
             obj = getattr(obj, subpath)
         except AttributeError:
             raise AttributeError("Can't get attribute {!r} on {!r}"
-                                 .format(name, obj))
+                                 .format(name, obj)) from None
     return obj, parent
 
 def whichmodule(obj, name):
@@ -919,7 +919,7 @@ class _Pickler:
         except (ImportError, KeyError, AttributeError):
             raise PicklingError(
                 "Can't pickle %r: it's not found as %s.%s" %
-                (obj, module_name, name))
+                (obj, module_name, name)) from None
         else:
             if obj2 is not obj:
                 raise PicklingError(
@@ -964,7 +964,7 @@ class _Pickler:
             except UnicodeEncodeError:
                 raise PicklingError(
                     "can't pickle global identifier '%s.%s' using "
-                    "pickle protocol %i" % (module, name, self.proto))
+                    "pickle protocol %i" % (module, name, self.proto)) from None
 
         self.memoize(obj)
 
index bd4760f1a7409d573435a3d541543f7473333dc9..31536fe6327069400be90271277770499a9d8685 100644 (file)
@@ -786,7 +786,7 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,
     try:
         format_info = _ARCHIVE_FORMATS[format]
     except KeyError:
-        raise ValueError("unknown archive format '%s'" % format)
+        raise ValueError("unknown archive format '%s'" % format) from None
 
     func = format_info[0]
     for arg, val in format_info[1]:
@@ -962,7 +962,7 @@ def unpack_archive(filename, extract_dir=None, format=None):
         try:
             format_info = _UNPACK_FORMATS[format]
         except KeyError:
-            raise ValueError("Unknown unpack format '{0}'".format(format))
+            raise ValueError("Unknown unpack format '{0}'".format(format)) from None
 
         func = format_info[1]
         func(filename, extract_dir, **dict(format_info[2]))
index 9314e71a2f82b759a197d45ab6133fcd555930bd..ed0a34d662f1894759bce120234b88a344799799 100644 (file)
@@ -147,7 +147,7 @@ def _subst_vars(s, local_vars):
         try:
             return s.format(**os.environ)
         except KeyError as var:
-            raise AttributeError('{%s}' % var)
+            raise AttributeError('{%s}' % var) from None
 
 def _extend_dict(target_dict, other_dict):
     target_keys = target_dict.keys()
index 5badb0be3763fd0ecd8267e78115681ba7fa1c37..d7d88d3e388222ac46443e8afe5990583cbd3346 100644 (file)
@@ -209,7 +209,7 @@ def _setoption(arg):
             if lineno < 0:
                 raise ValueError
         except (ValueError, OverflowError):
-            raise _OptionError("invalid lineno %r" % (lineno,))
+            raise _OptionError("invalid lineno %r" % (lineno,)) from None
     else:
         lineno = 0
     filterwarnings(action, message, category, module, lineno)
@@ -233,7 +233,7 @@ def _getcategory(category):
         try:
             cat = eval(category)
         except NameError:
-            raise _OptionError("unknown warning category: %r" % (category,))
+            raise _OptionError("unknown warning category: %r" % (category,)) from None
     else:
         i = category.rfind(".")
         module = category[:i]
@@ -241,11 +241,11 @@ def _getcategory(category):
         try:
             m = __import__(module, None, None, [klass])
         except ImportError:
-            raise _OptionError("invalid module name: %r" % (module,))
+            raise _OptionError("invalid module name: %r" % (module,)) from None
         try:
             cat = getattr(m, klass)
         except AttributeError:
-            raise _OptionError("unknown warning category: %r" % (category,))
+            raise _OptionError("unknown warning category: %r" % (category,)) from None
     if not issubclass(cat, Warning):
         raise _OptionError("invalid warning category: %r" % (category,))
     return cat
index e9a1536472cd55ec117429106da244c823696d66..60a2bc36e3c2b5f645c514fd1e9d68d76bf7c62e 100644 (file)
@@ -80,7 +80,7 @@ class DOMBuilder:
                 settings = self._settings[(_name_xform(name), state)]
             except KeyError:
                 raise xml.dom.NotSupportedErr(
-                    "unsupported feature: %r" % (name,))
+                    "unsupported feature: %r" % (name,)) from None
             else:
                 for name, value in settings:
                     setattr(self._options, name, value)
index ab6b79a777aa4d6e4a438e329c443b3110ae9ad3..361f6d54fa554043c7b70b5fef8cf7b6f08a555c 100644 (file)
@@ -80,7 +80,7 @@ def xpath_tokenizer(pattern, namespaces=None):
                     raise KeyError
                 yield token[0], "{%s}%s" % (namespaces[prefix], uri)
             except KeyError:
-                raise SyntaxError("prefix %r not found in prefix map" % prefix)
+                raise SyntaxError("prefix %r not found in prefix map" % prefix) from None
         else:
             yield token
 
index 9bb3e6e1734baaad021e1fbf535ebf6556658e29..e283848994909e08b70f00ec660be063b57f29e1 100644 (file)
@@ -39,7 +39,7 @@ def get_custom_entry_point(subsystem):
     try:
         return subsystem_details[subsystem][:2]
     except KeyError:
-        raise ValueError("The subsystem %s is not known" % subsystem)
+        raise ValueError("The subsystem %s is not known" % subsystem) from None
 
 
 def makemakefile(outfp, vars, files, target):
index 0348148a61ba8d2b00d57ae74d7d6398f9027566..eb76d4042d33b6c7e0e83eabebf3363fd7e12d4d 100644 (file)
@@ -87,7 +87,7 @@ class ColorDB:
         try:
             return self.__byrgb[rgbtuple]
         except KeyError:
-            raise BadColor(rgbtuple)
+            raise BadColor(rgbtuple) from None
 
     def find_byname(self, name):
         """Return (red, green, blue) for name"""
@@ -95,7 +95,7 @@ class ColorDB:
         try:
             return self.__byname[name]
         except KeyError:
-            raise BadColor(name)
+            raise BadColor(name) from None
 
     def nearest(self, red, green, blue):
         """Return the name of color nearest (red, green, blue)"""
@@ -128,7 +128,7 @@ class ColorDB:
         try:
             name, aliases = self.__byrgb[(red, green, blue)]
         except KeyError:
-            raise BadColor((red, green, blue))
+            raise BadColor((red, green, blue)) from None
         return [name] + aliases
 
 \f