]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 69578-69580,69901,69907,69994,70022-70023,70025-70026,70166,70273...
authorGeorg Brandl <georg@python.org>
Sun, 5 Apr 2009 21:48:06 +0000 (21:48 +0000)
committerGeorg Brandl <georg@python.org>
Sun, 5 Apr 2009 21:48:06 +0000 (21:48 +0000)
........
  r69578 | georg.brandl | 2009-02-13 12:03:59 +0100 (Fr, 13 Feb 2009) | 1 line

  #3694: add test for fix committed in r66693.
........
  r69579 | georg.brandl | 2009-02-13 12:06:59 +0100 (Fr, 13 Feb 2009) | 2 lines

  Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
  r69580 | georg.brandl | 2009-02-13 12:10:04 +0100 (Fr, 13 Feb 2009) | 2 lines

  Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
  r69901 | georg.brandl | 2009-02-23 12:24:46 +0100 (Mo, 23 Feb 2009) | 2 lines

  #5349: C++ pure virtuals can also have an implementation.
........
  r69907 | georg.brandl | 2009-02-23 19:33:48 +0100 (Mo, 23 Feb 2009) | 1 line

  Fix grammar.
........
  r69994 | georg.brandl | 2009-02-26 18:36:26 +0100 (Do, 26 Feb 2009) | 1 line

  Document that setting sys.py3kwarning wont do anything.
........
  r70022 | georg.brandl | 2009-02-27 17:23:18 +0100 (Fr, 27 Feb 2009) | 1 line

  #5361: fix typo.
........
  r70023 | georg.brandl | 2009-02-27 17:39:26 +0100 (Fr, 27 Feb 2009) | 1 line

  #5363: fix cmpfiles() docs. Another instance where a prose description is twice as long as the code.
........
  r70025 | georg.brandl | 2009-02-27 17:52:55 +0100 (Fr, 27 Feb 2009) | 1 line

  #5344: fix punctuation.
........
  r70026 | georg.brandl | 2009-02-27 17:59:03 +0100 (Fr, 27 Feb 2009) | 1 line

  #5365: add quick look conversion table for different time representations.
........
  r70166 | georg.brandl | 2009-03-04 19:24:41 +0100 (Mi, 04 Mär 2009) | 2 lines

  Remove obsolete stuff from string module docs.
........
  r70273 | georg.brandl | 2009-03-09 15:25:07 +0100 (Mo, 09 Mär 2009) | 2 lines

  #5458: add a note when we started to raise RuntimeErrors.
........
  r70275 | georg.brandl | 2009-03-09 17:35:48 +0100 (Mo, 09 Mär 2009) | 2 lines

  Add missing space.
........
  r70342 | georg.brandl | 2009-03-13 20:03:58 +0100 (Fr, 13 Mär 2009) | 1 line

  #5486: typos.
........
  r70386 | georg.brandl | 2009-03-15 22:32:06 +0100 (So, 15 Mär 2009) | 1 line

  #5496: fix docstring of lookup().
........
  r70387 | georg.brandl | 2009-03-15 22:37:16 +0100 (So, 15 Mär 2009) | 1 line

  #5493: clarify __nonzero__ docs.
........
  r70389 | georg.brandl | 2009-03-15 22:43:38 +0100 (So, 15 Mär 2009) | 1 line

  Fix a small nit in the error message if bool() falls back on __len__ and it returns the wrong type: it would tell the user that __nonzero__ should return bool or int.
........
  r70390 | georg.brandl | 2009-03-15 22:44:43 +0100 (So, 15 Mär 2009) | 1 line

  #5491: clarify nested() semantics.
........
  r70392 | georg.brandl | 2009-03-15 22:46:00 +0100 (So, 15 Mär 2009) | 1 line

  #5488: add missing struct member.
........
  r70393 | georg.brandl | 2009-03-15 22:47:42 +0100 (So, 15 Mär 2009) | 1 line

  #5478: fix copy-paste oversight in function signature.
........
  r70395 | georg.brandl | 2009-03-15 22:51:48 +0100 (So, 15 Mär 2009) | 1 line

  #5276: document IDLESTARTUP and .Idle.py.
........
  r70397 | georg.brandl | 2009-03-15 22:53:56 +0100 (So, 15 Mär 2009) | 1 line

  #5469: add with statement to list of name-binding constructs.
........
  r70400 | georg.brandl | 2009-03-15 22:59:37 +0100 (So, 15 Mär 2009) | 3 lines

  Fix markup in re docs and give a mail address in regex howto, so that
  the recommendation to send suggestions to the author can be followed.
........
  r70418 | georg.brandl | 2009-03-16 20:42:03 +0100 (Mo, 16 Mär 2009) | 1 line

  Add token markup.
........

25 files changed:
Doc/c-api/typeobj.rst
Doc/distutils/packageindex.rst
Doc/howto/regex.rst
Doc/library/2to3.rst
Doc/library/abc.rst
Doc/library/contextlib.rst
Doc/library/exceptions.rst
Doc/library/filecmp.rst
Doc/library/idle.rst
Doc/library/re.rst
Doc/library/stdtypes.rst
Doc/library/string.rst
Doc/library/sys.rst
Doc/library/threading.rst
Doc/library/time.rst
Doc/library/turtle.rst
Doc/library/xml.dom.rst
Doc/reference/datamodel.rst
Doc/reference/executionmodel.rst
Doc/whatsnew/2.6.rst
Lib/test/test_struct.py
Modules/_codecsmodule.c
Modules/_ctypes/_ctypes.c
Objects/typeobject.c
Objects/unicodeobject.c

index 24f508e8b3a2e66569cd1632c5f4ecad081c6899..a320d9e6764f0bdbb7ce948bca73d8746778361c 100644 (file)
@@ -1180,6 +1180,7 @@ Number Object Structures
             binaryfunc nb_inplace_add;
             binaryfunc nb_inplace_subtract;
             binaryfunc nb_inplace_multiply;
+            binaryfunc nb_inplace_divide;
             binaryfunc nb_inplace_remainder;
             ternaryfunc nb_inplace_power;
             binaryfunc nb_inplace_lshift;
index 3715c82480a47ca983f81c15d7ec4677322b076c..912248ec7b6aace90c4d17f1e128bffc3e1bcfdb 100644 (file)
@@ -91,4 +91,3 @@ Or even with the section name::
 
    python setup.py register -r other
 
-
index d7ab0786b6a634d42ebca52c5e11cc348a9b1bf4..eab23af5756cf58470128b3b47eda1ef15513194 100644 (file)
@@ -4,7 +4,7 @@
   Regular Expression HOWTO
 ****************************
 
-:Author: A.M. Kuchling
+:Author: A.M. Kuchling <amk@amk.ca>
 :Release: 0.05
 
 .. TODO:
index 375bd10e965f976347f19e280e4fc5df4346c2a4..b1c2dd72cc7bf7cf777dda2c64b44aa9b858e6f0 100644 (file)
@@ -36,9 +36,9 @@ It can be converted to Python 3.x code via 2to3 on the command line::
    $ 2to3 example.py
 
 A diff against the original source file is printed.  2to3 can also write the
-needed modifications right back to the source file.  (Of course, a backup of the
-original is also be made unless :option:`-n` is also given.)  Writing the
-changes back is enabled with the :option:`-w` flag::
+needed modifications right back to the source file.  (A backup of the original
+file is made unless :option:`-n` is also given.)  Writing the changes back is
+enabled with the :option:`-w` flag::
 
    $ 2to3 -w example.py
 
index 505fca12a1f33a795917fe84c9aa8855940a8e6d..9f70b024c40c1526890c03ccc436a8ea7e9c06d4 100644 (file)
@@ -153,7 +153,7 @@ It also provides the following decorators:
 
    .. note::
 
-      Unlike C++'s pure virtual functions, or Java abstract methods, these abstract
+      Unlike Java abstract methods, these abstract
       methods may have an implementation. This implementation can be
       called via the :func:`super` mechanism from the class that
       overrides it.  This could be useful as an end-point for a
index 8c10c95494b7632e90237b262b1d11ce28b76723..935afeeba907295b3d0ee06d16d97714b3fb06f7 100644 (file)
@@ -63,14 +63,15 @@ Functions provided:
 
       from contextlib import nested
 
-      with nested(A, B, C) as (X, Y, Z):
+      with nested(A(), B(), C()) as (X, Y, Z):
           do_something()
 
    is equivalent to this::
 
-      with A as X:
-          with B as Y:
-              with C as Z:
+      m1, m2, m3 = A(), B(), C()
+      with m1 as X:
+          with m2 as Y:
+              with m3 as Z:
                   do_something()
 
    Note that if the :meth:`__exit__` method of one of the nested context managers
index 9673dab8f14e16774fa6541bed02e742fdc8fd88..a50ffbfe64ab4c6c7f0f8d9c87d24af644c70d29 100644 (file)
@@ -52,7 +52,7 @@ The following exceptions are only used as base classes for other exceptions.
    The base class for all built-in exceptions.  It is not meant to be directly
    inherited by user-defined classes (for that use :exc:`Exception`).  If
    :func:`str` or :func:`unicode` is called on an instance of this class, the
-   representation of the argument(s) to the instance are returned or the emptry
+   representation of the argument(s) to the instance are returned or the empty
    string when there were no arguments.  All arguments are  stored in :attr:`args`
    as a tuple.
 
index 3377d974364b8d53c78b81a967a020975fd6823a..11d74ba770c766837804478933067fde47c3a7f8 100644 (file)
@@ -31,17 +31,24 @@ The :mod:`filecmp` module defines the following functions:
 
 .. function:: cmpfiles(dir1, dir2, common[, shallow])
 
-   Returns three lists of file names: *match*, *mismatch*, *errors*.  *match*
-   contains the list of files match in both directories, *mismatch* includes the
-   names of those that don't, and *errros* lists the names of files which could not
-   be compared.  Files may be listed in *errors* because the user may lack
-   permission to read them or many other reasons, but always that the comparison
-   could not be done for some reason.
-
-   The *common* parameter is a list of file names found in both directories. The
-   *shallow* parameter has the same meaning and default value as for
+   Compare the files in the two directories *dir1* and *dir2* whose names are
+   given by *common*.
+
+   Returns three lists of file names: *match*, *mismatch*,
+   *errors*.  *match* contains the list of files that match, *mismatch* contains
+   the names of those that don't, and *errors* lists the names of files which
+   could not be compared.  Files are listed in *errors* if they don't exist in
+   one of the directories, the user lacks permission to read them or if the
+   comparison could not be done for some other reason.
+
+   The *shallow* parameter has the same meaning and default value as for
    :func:`filecmp.cmp`.
 
+   For example, ``cmpfiles('a', 'b', ['c', 'd/e'])`` will compare ``a/c`` with
+   ``b/c`` and ``a/d/e`` with ``b/d/e``.  ``'c'`` and ``'d/e'`` will each be in
+   one of the three returned lists.
+
+
 Example::
 
    >>> import filecmp
index 413750fda54e0bd9a1e751c2242f2916400f0899..1b78fb9bc1bb50e6b1db03a62cbbb3df02e2e1bd 100644 (file)
@@ -253,6 +253,24 @@ Shell colors:
       black
 
 
+Startup
+-------
+
+Upon startup with the ``-s`` option, IDLE will execute the file referenced by
+the environment variables :envvar:`IDLESTARTUP` or :envvar:`PYTHONSTARTUP`.
+Idle first checks for ``IDLESTARTUP``; if ``IDLESTARTUP`` is present the file
+referenced is run.  If ``IDLESTARTUP`` is not present, Idle checks for
+``PYTHONSTARTUP``.  Files referenced by these environment variables are
+convenient places to store functions that are used frequently from the Idle
+shell, or for executing import statements to import common modules.
+
+In addition, ``Tk`` also loads a startup file if it is present.  Note that the
+Tk file is loaded unconditionally.  This additional file is ``.Idle.py`` and is
+looked for in the user's home directory.  Statements in this file will be
+executed in the Tk namespace, so this file is not useful for importing functions
+to be used from Idle's Python shell.
+
+
 Command line usage
 ^^^^^^^^^^^^^^^^^^
 
index 6ff89eab032557e5ec3d17cfac3a382e9f9e0ee8..d2c95580532c60239b27f16c0e29862527d01bd9 100644 (file)
@@ -1093,7 +1093,7 @@ For example:
    string)`` or ``re.search(pattern, string)``.
 
 :func:`match` has an optional second parameter that gives an index in the string
-where the search is to start:
+where the search is to start::
 
    >>> pattern = re.compile("o")
    >>> pattern.match("dog")      # No match as "o" is not at the start of "dog."
index 998ae77bdc475110811e9e84f1332fd36889b843..56b63128cd630f22179fee5bbf2a30d9ad0aac70 100644 (file)
@@ -1296,7 +1296,7 @@ The conversion types are:
 +------------+-----------------------------------------------------+-------+
 | ``'o'``    | Signed octal value.                                 | \(1)  |
 +------------+-----------------------------------------------------+-------+
-| ``'u'``    | Obselete type -- it is identical to ``'d'``.        | \(7)  |
+| ``'u'``    | Obsolete type -- it is identical to ``'d'``.        | \(7)  |
 +------------+-----------------------------------------------------+-------+
 | ``'x'``    | Signed hexadecimal (lowercase).                     | \(2)  |
 +------------+-----------------------------------------------------+-------+
index 673f756bc6dc22f70727153aefca2d09500e08f3..4c3be4f20eb6b3c3b2f6cb46a510b9332b791b88 100644 (file)
@@ -62,10 +62,9 @@ The constants defined in this module are:
 .. data:: lowercase
 
    A string containing all the characters that are considered lowercase letters.
-   On most systems this is the string ``'abcdefghijklmnopqrstuvwxyz'``.  Do not
-   change its definition --- the effect on the routines :func:`upper` and
-   :func:`swapcase` is undefined.  The specific value is locale-dependent, and will
-   be updated when :func:`locale.setlocale` is called.
+   On most systems this is the string ``'abcdefghijklmnopqrstuvwxyz'``.  The
+   specific value is locale-dependent, and will be updated when
+   :func:`locale.setlocale` is called.
 
 
 .. data:: octdigits
@@ -89,18 +88,16 @@ The constants defined in this module are:
 .. data:: uppercase
 
    A string containing all the characters that are considered uppercase letters.
-   On most systems this is the string ``'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``.  Do not
-   change its definition --- the effect on the routines :func:`lower` and
-   :func:`swapcase` is undefined.  The specific value is locale-dependent, and will
-   be updated when :func:`locale.setlocale` is called.
+   On most systems this is the string ``'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``.  The
+   specific value is locale-dependent, and will be updated when
+   :func:`locale.setlocale` is called.
 
 
 .. data:: whitespace
 
    A string containing all characters that are considered whitespace. On most
    systems this includes the characters space, tab, linefeed, return, formfeed, and
-   vertical tab.  Do not change its definition --- the effect on the routines
-   :func:`strip` and :func:`split` is undefined.
+   vertical tab.
 
 
 .. _new-string-formatting:
@@ -224,7 +221,7 @@ The grammar for a replacement field is as follows:
 
    .. productionlist:: sf
       replacement_field: "{" `field_name` ["!" `conversion`] [":" `format_spec`] "}"
-      field_name: (`identifier` | `integer`) ("." `attribute_name` | "[" element_index "]")*
+      field_name: (`identifier` | `integer`) ("." `attribute_name` | "[" `element_index` "]")*
       attribute_name: `identifier`
       element_index: `integer`
       conversion: "r" | "s"
@@ -599,7 +596,7 @@ They are not available as string methods.
 
       Don't use strings derived from :const:`lowercase` and :const:`uppercase` as
       arguments; in some locales, these don't have the same length.  For case
-      conversions, always use :func:`lower` and :func:`upper`.
+      conversions, always use :meth:`str.lower` and :meth:`str.upper`.
 
 
 Deprecated string functions
index a476f4d3010c41386a7be952ee7f816f2848c130..61b757654ade969a32a6e3ef2192a2a9a91fa839 100644 (file)
@@ -661,7 +661,9 @@ always available.
 .. data:: py3kwarning
 
    Bool containing the status of the Python 3.0 warning flag. It's ``True``
-   when Python is started with the -3 option.
+   when Python is started with the -3 option.  (This should be considered
+   read-only; setting it to a different value doesn't have an effect on
+   Python 3.0 warnings.)
 
    .. versionadded:: 2.6
 
index e6616dbcd279a5b8112c02c7051f84aaa32646cc..69593ae7b1fd627ffcff3e055d0f3ebfb0bb1738 100644 (file)
@@ -21,9 +21,14 @@ The :mod:`dummy_threading` module is provided for situations where
    deprecation of the ``camelCase`` names and they remain fully supported in
    both Python 2.x and 3.x.
 
-This module defines the following functions and objects:
+.. note::
+
+   Starting with Python 2.5, several Thread methods raise :exc:`RuntimeError`
+   instead of :exc:`AssertionError` if called erroneously.
 
 
+This module defines the following functions and objects:
+
 .. function:: active_count()
               activeCount()
 
index c9b7355316026a9dca00a9383df66a9dea9878be..1ffef2b24494b3572ae4334b65242c51de1f6b36 100644 (file)
@@ -118,6 +118,24 @@ An explanation of some terminology and conventions is in order.
      The time value sequence was changed from a tuple to a :class:`struct_time`, with
      the addition of attribute names for the fields.
 
+* Use the following functions to convert between time representations:
+
+  +-------------------------+-------------------------+-------------------------+
+  | From                    | To                      | Use                     |
+  +=========================+=========================+=========================+
+  | seconds since the epoch | :class:`struct_time` in | :func:`gmtime`          |
+  |                         | UTC                     |                         |
+  +-------------------------+-------------------------+-------------------------+
+  | seconds since the epoch | :class:`struct_time` in | :func:`localtime`       |
+  |                         | local time              |                         |
+  +-------------------------+-------------------------+-------------------------+
+  | :class:`struct_time` in | seconds since the epoch | :func:`calendar.timegm` |
+  | UTC                     |                         |                         |
+  +-------------------------+-------------------------+-------------------------+
+  | :class:`struct_time` in | seconds since the epoch | :func:`mktime`          |
+  | local time              |                         |                         |
+  +-------------------------+-------------------------+-------------------------+
+
 
 The module defines the following functions and data items:
 
index fd84597534a53cd0c9708b68266d57f1779174f4..97074204a4b1adde6388b3f0fb3ba42feab10054 100644 (file)
@@ -61,7 +61,7 @@ The object-oriented interface uses essentially two+two classes:
 
 The procedural interface provides functions which are derived from the methods
 of the classes :class:`Screen` and :class:`Turtle`.  They have the same names as
-the corresponding methods.  A screen object is automativally created whenever a
+the corresponding methods.  A screen object is automatically created whenever a
 function derived from a Screen method is called.  An (unnamed) turtle object is
 automatically created whenever any of the functions derived from a Turtle method
 is called.
@@ -1608,7 +1608,7 @@ The public classes of the module :mod:`turtle`
    =========== ===========
    "polygon"   a polygon-tuple, i.e. a tuple of pairs of coordinates
    "image"     an image  (in this form only used internally!)
-   "compound"  ``None`` (a compund shape has to be constructed using the
+   "compound"  ``None`` (a compound shape has to be constructed using the
                :meth:`addcomponent` method)
    =========== ===========
 
@@ -1830,7 +1830,7 @@ There is a set of demo scripts in the turtledemo directory located in the
 
 It contains:
 
-- a set of 15 demo scripts demonstrating differet features of the new module
+- a set of 15 demo scripts demonstrating different features of the new module
   :mod:`turtle`
 - a demo viewer :file:`turtleDemo.py` which can be used to view the sourcecode
   of the scripts and run them at the same time. 14 of the examples can be
index 16cfad5b7a9d69c60cf98ba6c5060ea8b5e242f2..8a74e7d3db0511624098e4c3e50515042bec8f43 100644 (file)
@@ -611,7 +611,7 @@ of that class.
    Same as equivalent method in the :class:`Document` class.
 
 
-.. method:: Element.getElementsByTagNameNS(tagName)
+.. method:: Element.getElementsByTagNameNS(namespaceURI, localName)
 
    Same as equivalent method in the :class:`Document` class.
 
index c13e80286cc3dcc2c6e5d9b0803614c3f72a0999..7d5b7beff842995ea9ef6a68afcf251bc75deaa8 100644 (file)
@@ -1414,11 +1414,12 @@ Basic customization
 
    .. index:: single: __len__() (mapping object method)
 
-   Called to implement truth value testing, and the built-in operation ``bool()``;
+   Called to implement truth value testing and the built-in operation ``bool()``;
    should return ``False`` or ``True``, or their integer equivalents ``0`` or
-   ``1``. When this method is not defined, :meth:`__len__` is called, if it is
-   defined (see below).  If a class defines neither :meth:`__len__` nor
-   :meth:`__nonzero__`, all its instances are considered true.
+   ``1``.  When this method is not defined, :meth:`__len__` is called, if it is
+   defined, and the object is considered true if its result is nonzero.
+   If a class defines neither :meth:`__len__` nor :meth:`__nonzero__`, all its
+   instances are considered true.
 
 
 .. method:: object.__unicode__(self)
index 0d15657d8a3ee29ebf656fb903b7f7c08dc53d4a..05f8b928c426a7c2cdbb757202113193d0b585ad 100644 (file)
@@ -87,9 +87,10 @@ subclass of :exc:`NameError`.
 The following constructs bind names: formal parameters to functions,
 :keyword:`import` statements, class and function definitions (these bind the
 class or function name in the defining block), and targets that are identifiers
-if occurring in an assignment, :keyword:`for` loop header, or in the second
-position of an :keyword:`except` clause header.  The :keyword:`import` statement
-of the form "``from ...import *``" binds all names defined in the imported
+if occurring in an assignment, :keyword:`for` loop header, in the second
+position of an :keyword:`except` clause header or after :keyword:`as` in a
+:keyword:`with` statement.  The :keyword:`import` statement
+of the form ``from ... import *`` binds all names defined in the imported
 module, except those beginning with an underscore.  This form may only be used
 at the module level.
 
index 297584b1daa45422a637c028c111b5d2cd79bbaf..9cfa9802e639ed29783b9f817059d8bc9f0d7d68 100644 (file)
@@ -270,7 +270,7 @@ structure is::
 
 The expression is evaluated, and it should result in an object that supports the
 context management protocol (that is, has :meth:`__enter__` and :meth:`__exit__`
-methods.
+methods).
 
 The object's :meth:`__enter__` is called before *with-block* is executed and
 therefore can run set-up code. It also may return a value that is bound to the
index 7f5f08b4c691523771d329a7628516987220945d..cda7dee6cd444e7312adb2982cf4e1aebb9b32a1 100644 (file)
@@ -512,6 +512,10 @@ class StructTest(unittest.TestCase):
         self.assertRaises(struct.error, s.pack_into, small_buf, 0, test_string)
         self.assertRaises(struct.error, s.pack_into, small_buf, 2, test_string)
 
+        # Test bogus offset (issue 3694)
+        sb = small_buf
+        self.assertRaises(TypeError, struct.pack_into, b'1', sb, None)
+
     def test_pack_into_fn(self):
         test_string = 'Reykjavik rocks, eow!'
         writable_buf = array.array('c', ' '*100)
index 9a1470021e21ddd8385664839ed7517067fd71dd..6877238036223e85fbb543825f476a72bc2df837 100644 (file)
@@ -61,7 +61,7 @@ PyDoc_STRVAR(lookup__doc__,
 "lookup(encoding) -> CodecInfo\n\
 \n\
 Looks up a codec tuple in the Python codec registry and returns\n\
-a tuple of function (or a CodecInfo object).");
+a CodecInfo object.");
 
 static
 PyObject *codec_lookup(PyObject *self, PyObject *args)
index a509d4b0107f9ce9f42868005a24e44315ed58fe..360046bd0da2ce3feff8837cb67f5606b3b10330 100644 (file)
@@ -599,13 +599,14 @@ CDataType_in_dll(PyObject *type, PyObject *args)
 #else
        address = (void *)ctypes_dlsym(handle, name);
        if (!address) {
-               PyErr_Format(PyExc_ValueError,
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
+               PyErr_Format(PyExc_ValueError,
                             "symbol '%s' not found (%s) ",
-                            name,
+                            name);
+#else
+               PyErr_SetString(PyExc_ValueError, ctypes_dlerror());
 #endif
-                            ctypes_dlerror());
                return NULL;
        }
 #endif
@@ -3283,13 +3284,14 @@ CFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
 #else
        address = (PPROC)ctypes_dlsym(handle, name);
        if (!address) {
-               PyErr_Format(PyExc_AttributeError,
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
+               PyErr_Format(PyExc_AttributeError,
                             "function '%s' not found (%s) ",
-                            name,
+                            name);
+#else
+               PyErr_SetString(PyExc_AttributeError, ctypes_dlerror());
 #endif
-                            ctypes_dlerror());
                return NULL;
        }
 #endif
index 3f790e88242253db508660018ffdcd574d4c233a..ddfc73056582f7449dd864b0f2142ec2caf54c50 100644 (file)
@@ -5092,6 +5092,7 @@ slot_nb_nonzero(PyObject *self)
        PyObject *func, *args;
        static PyObject *nonzero_str, *len_str;
        int result = -1;
+       int using_len = 0;
 
        func = lookup_maybe(self, "__nonzero__", &nonzero_str);
        if (func == NULL) {
@@ -5100,6 +5101,7 @@ slot_nb_nonzero(PyObject *self)
                func = lookup_maybe(self, "__len__", &len_str);
                if (func == NULL)
                        return PyErr_Occurred() ? -1 : 1;
+               using_len = 1;
        }
        args = PyTuple_New(0);
        if (args != NULL) {
@@ -5110,8 +5112,10 @@ slot_nb_nonzero(PyObject *self)
                                result = PyObject_IsTrue(temp);
                        else {
                                PyErr_Format(PyExc_TypeError,
-                                            "__nonzero__ should return "
+                                            "%s should return "
                                             "bool or int, returned %s",
+                                            (using_len ? "__len__"
+                                                       : "__nonzero__"),
                                             temp->ob_type->tp_name);
                                result = -1;
                        }
index acec713f1654c11bf08d3bfb9076cdac65346ae4..5c27b048dc25725d2e99b2559e6df5b0e296c176 100644 (file)
@@ -1385,7 +1385,7 @@ int unicode_decode_call_errorhandler(const char *errors, PyObject **errorHandler
     if (restuple == NULL)
         goto onError;
     if (!PyTuple_Check(restuple)) {
-        PyErr_Format(PyExc_TypeError, &argparse[4]);
+        PyErr_SetString(PyExc_TypeError, &argparse[4]);
         goto onError;
     }
     if (!PyArg_ParseTuple(restuple, argparse, &PyUnicode_Type, &repunicode, &newpos))
@@ -3440,7 +3440,7 @@ static PyObject *unicode_encode_call_errorhandler(const char *errors,
     if (restuple == NULL)
         return NULL;
     if (!PyTuple_Check(restuple)) {
-        PyErr_Format(PyExc_TypeError, &argparse[4]);
+        PyErr_SetString(PyExc_TypeError, &argparse[4]);
         Py_DECREF(restuple);
         return NULL;
     }
@@ -4712,7 +4712,7 @@ static PyObject *unicode_translate_call_errorhandler(const char *errors,
     if (restuple == NULL)
         return NULL;
     if (!PyTuple_Check(restuple)) {
-        PyErr_Format(PyExc_TypeError, &argparse[4]);
+        PyErr_SetString(PyExc_TypeError, &argparse[4]);
         Py_DECREF(restuple);
         return NULL;
     }