Merged revisions 72319-72320,72467,72661,72675-72679,72703,72708,72710,72712,72801-72802,72820,72822,72824,72826-72828,72830 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72319 | georg.brandl | 2009-05-05 10:28:49 +0200 (Di, 05 Mai 2009) | 1 line #1309567: fix linecache behavior of stripping subdirectories from paths when looking for relative filename matches. Also add a linecache test suite. ........ r72320 | georg.brandl | 2009-05-05 10:30:28 +0200 (Di, 05 Mai 2009) | 1 line Add a news entry for r72319. ........ r72467 | georg.brandl | 2009-05-08 14:17:34 +0200 (Fr, 08 Mai 2009) | 1 line Fix name. ........ r72661 | georg.brandl | 2009-05-15 10:03:03 +0200 (Fr, 15 Mai 2009) | 1 line Fix example output for doctest-like demos. ........ r72675 | georg.brandl | 2009-05-16 13:13:21 +0200 (Sa, 16 Mai 2009) | 1 line #6034: clarify __reversed__ doc. ........ r72676 | georg.brandl | 2009-05-16 13:14:46 +0200 (Sa, 16 Mai 2009) | 1 line #6025: fix signature of parse(). ........ r72677 | georg.brandl | 2009-05-16 13:18:55 +0200 (Sa, 16 Mai 2009) | 1 line #6009: undocument default argument of Option as deprecated. ........ r72678 | georg.brandl | 2009-05-16 13:21:29 +0200 (Sa, 16 Mai 2009) | 1 line #2856: document 2.x os.listdir() behavior for undecodable filenames. ........ r72679 | georg.brandl | 2009-05-16 13:24:41 +0200 (Sa, 16 Mai 2009) | 1 line Fix about and bugs pages to match real workflow. ........ r72703 | georg.brandl | 2009-05-17 10:10:27 +0200 (So, 17 Mai 2009) | 1 line part of #4144: fix exception message in console session. ........ r72708 | georg.brandl | 2009-05-17 10:24:29 +0200 (So, 17 Mai 2009) | 1 line #6017: better document behavior of dictiterators when the dict is changed. ........ r72710 | georg.brandl | 2009-05-17 10:36:04 +0200 (So, 17 Mai 2009) | 1 line #5942: Copy over flag table from dbm.rst which is clearer. ........ r72712 | georg.brandl | 2009-05-17 10:55:00 +0200 (So, 17 Mai 2009) | 1 line #5935: mention that BROWSER is looked for in PATH. ........ r72801 | georg.brandl | 2009-05-20 20:31:14 +0200 (Mi, 20 Mai 2009) | 1 line #6055: refer to "sqlite3" consistently. ........ r72802 | georg.brandl | 2009-05-20 20:35:27 +0200 (Mi, 20 Mai 2009) | 1 line #6051: refer to email examples for better way to construct email messages. ........ r72820 | georg.brandl | 2009-05-22 09:23:32 +0200 (Fr, 22 Mai 2009) | 1 line Use raise X(y). ........ r72822 | georg.brandl | 2009-05-22 11:33:25 +0200 (Fr, 22 Mai 2009) | 1 line #6084: fix example. ........ r72824 | georg.brandl | 2009-05-22 11:43:17 +0200 (Fr, 22 Mai 2009) | 1 line Fix references to file-related functions and methods (os.* vs file.*). ........ r72826 | georg.brandl | 2009-05-22 11:49:42 +0200 (Fr, 22 Mai 2009) | 1 line Fix confusing wording. ........ r72827 | georg.brandl | 2009-05-22 11:50:30 +0200 (Fr, 22 Mai 2009) | 1 line s/use/call/ ........ r72828 | georg.brandl | 2009-05-22 11:58:48 +0200 (Fr, 22 Mai 2009) | 1 line Correction in softspace behavior description. ........ r72830 | georg.brandl | 2009-05-22 12:40:00 +0200 (Fr, 22 Mai 2009) | 1 line #6086: fix spelling and use a better exception to catch. ........
This commit is contained in:
parent
6415f07c2e
commit
e081eef126
|
@ -7,8 +7,8 @@ These documents are generated from `reStructuredText
|
|||
<http://docutils.sf.net/rst.html>`_ sources by *Sphinx*, a document processor
|
||||
specifically written for the Python documentation.
|
||||
|
||||
In the online version of these documents, you can submit comments and suggest
|
||||
changes directly on the documentation pages.
|
||||
.. In the online version of these documents, you can submit comments and suggest
|
||||
changes directly on the documentation pages.
|
||||
|
||||
Development of the documentation and its toolchain takes place on the
|
||||
docs@python.org mailing list. We're always looking for volunteers wanting
|
||||
|
@ -24,7 +24,8 @@ Many thanks go to:
|
|||
<http://effbot.org/zone/pyref.htm>`_ project from which Sphinx got many good
|
||||
ideas.
|
||||
|
||||
See :ref:`reporting-bugs` for information how to report bugs in Python itself.
|
||||
See :ref:`reporting-bugs` for information how to report bugs in this
|
||||
documentation, or Python itself.
|
||||
|
||||
.. including the ACKS file here so that it can be maintained separately
|
||||
.. include:: ACKS.txt
|
||||
|
|
|
@ -19,6 +19,9 @@ the problem has already been fixed for the next release, or additional
|
|||
information is needed (in which case you are welcome to provide it if you can!).
|
||||
To do this, search the bug database using the search box on the top of the page.
|
||||
|
||||
In the case of documentation bugs, look at the most recent development docs at
|
||||
http://docs.python.org/dev to see if the bug has been fixed.
|
||||
|
||||
If the problem you're reporting is not already in the bug tracker, go back to
|
||||
the Python Bug Tracker. If you don't already have a tracker account, select the
|
||||
"Register" link in the sidebar and undergo the registration procedure.
|
||||
|
|
|
@ -30,7 +30,7 @@ Inside Function Definitions
|
|||
|
||||
``from module import *`` is *invalid* inside function definitions. While many
|
||||
versions of Python do not check for the invalidity, it does not make it more
|
||||
valid, no more then having a smart lawyer makes a man innocent. Do not use it
|
||||
valid, no more than having a smart lawyer makes a man innocent. Do not use it
|
||||
like that ever. Even in versions where it was accepted, it made the function
|
||||
execution slower, because the compiler could not be certain which names are
|
||||
local and which are global. In Python 2.1 this construct causes warnings, and
|
||||
|
@ -111,7 +111,7 @@ Good examples::
|
|||
from module import name1, name2
|
||||
-------------------------------
|
||||
|
||||
This is a "don't" which is much weaker then the previous "don't"s but is still
|
||||
This is a "don't" which is much weaker than the previous "don't"s but is still
|
||||
something you should not do if you don't have good reasons to do that. The
|
||||
reason it is usually bad idea is because you suddenly have an object which lives
|
||||
in two separate namespaces. When the binding in one namespace changes, the
|
||||
|
@ -245,11 +245,11 @@ Using the Batteries
|
|||
Every so often, people seem to be writing stuff in the Python library again,
|
||||
usually poorly. While the occasional module has a poor interface, it is usually
|
||||
much better to use the rich standard library and data types that come with
|
||||
Python then inventing your own.
|
||||
Python than inventing your own.
|
||||
|
||||
A useful module very few people know about is :mod:`os.path`. It always has the
|
||||
correct path arithmetic for your operating system, and will usually be much
|
||||
better then whatever you come up with yourself.
|
||||
better than whatever you come up with yourself.
|
||||
|
||||
Compare::
|
||||
|
||||
|
@ -284,7 +284,7 @@ Using Backslash to Continue Statements
|
|||
======================================
|
||||
|
||||
Since Python treats a newline as a statement terminator, and since statements
|
||||
are often more then is comfortable to put in one line, many people do::
|
||||
are often more than is comfortable to put in one line, many people do::
|
||||
|
||||
if foo.bar()['first'][0] == baz.quux(1, 2)[5:9] and \
|
||||
calculate_number(10, 20) != forbulate(500, 360):
|
||||
|
|
|
@ -311,7 +311,7 @@ geturl, and info, methods. ::
|
|||
>>> req = urllib2.Request('http://www.python.org/fish.html')
|
||||
>>> try:
|
||||
>>> urllib2.urlopen(req)
|
||||
>>> except URLError, e:
|
||||
>>> except HTTPError, e:
|
||||
>>> print e.code
|
||||
>>> print e.read()
|
||||
>>>
|
||||
|
|
|
@ -13,7 +13,7 @@ cur.execute("select ?", (AUSTRIA,))
|
|||
row = cur.fetchone()
|
||||
assert row[0] == AUSTRIA
|
||||
|
||||
# but we can make pysqlite always return bytestrings ...
|
||||
# but we can make sqlite3 always return bytestrings ...
|
||||
con.text_factory = str
|
||||
cur.execute("select ?", (AUSTRIA,))
|
||||
row = cur.fetchone()
|
||||
|
@ -26,11 +26,12 @@ assert row[0] == AUSTRIA.encode("utf-8")
|
|||
# here we implement one that will ignore Unicode characters that cannot be
|
||||
# decoded from UTF-8
|
||||
con.text_factory = lambda x: unicode(x, "utf-8", "ignore")
|
||||
cur.execute("select ?", ("this is latin1 and would normally create errors" + u"\xe4\xf6\xfc".encode("latin1"),))
|
||||
cur.execute("select ?", ("this is latin1 and would normally create errors" +
|
||||
u"\xe4\xf6\xfc".encode("latin1"),))
|
||||
row = cur.fetchone()
|
||||
assert type(row[0]) == unicode
|
||||
|
||||
# pysqlite offers a builtin optimized text_factory that will return bytestring
|
||||
# sqlite3 offers a builtin optimized text_factory that will return bytestring
|
||||
# objects, if the data is in ASCII only, and otherwise return unicode objects
|
||||
con.text_factory = sqlite3.OptimizedUnicode
|
||||
cur.execute("select ?", (AUSTRIA,))
|
||||
|
|
|
@ -27,19 +27,33 @@ these modules is installed, the slow-but-simple implementation in module
|
|||
|
||||
Open the database file *filename* and return a corresponding object.
|
||||
|
||||
If the database file already exists, the :mod:`whichdb` module is used to
|
||||
determine its type and the appropriate module is used; if it does not exist, the
|
||||
first module listed above that can be imported is used.
|
||||
If the database file already exists, the :mod:`whichdb` module is used to
|
||||
determine its type and the appropriate module is used; if it does not exist,
|
||||
the first module listed above that can be imported is used.
|
||||
|
||||
The optional *flag* argument can be ``'r'`` to open an existing database for
|
||||
reading only, ``'w'`` to open an existing database for reading and writing,
|
||||
``'c'`` to create the database if it doesn't exist, or ``'n'``, which will
|
||||
always create a new empty database. If not specified, the default value is
|
||||
``'r'``.
|
||||
The optional *flag* argument must be one of these values:
|
||||
|
||||
+---------+-------------------------------------------+
|
||||
| Value | Meaning |
|
||||
+=========+===========================================+
|
||||
| ``'r'`` | Open existing database for reading only |
|
||||
| | (default) |
|
||||
+---------+-------------------------------------------+
|
||||
| ``'w'`` | Open existing database for reading and |
|
||||
| | writing |
|
||||
+---------+-------------------------------------------+
|
||||
| ``'c'`` | Open database for reading and writing, |
|
||||
| | creating it if it doesn't exist |
|
||||
+---------+-------------------------------------------+
|
||||
| ``'n'`` | Always create a new, empty database, open |
|
||||
| | for reading and writing |
|
||||
+---------+-------------------------------------------+
|
||||
|
||||
If not specified, the default value is ``'r'``.
|
||||
|
||||
The optional *mode* argument is the Unix mode of the file, used only when the
|
||||
database has to be created. It defaults to octal ``0666`` (and will be modified
|
||||
by the prevailing umask).
|
||||
database has to be created. It defaults to octal ``0666`` (and will be
|
||||
modified by the prevailing umask).
|
||||
|
||||
|
||||
.. exception:: error
|
||||
|
|
|
@ -341,9 +341,9 @@ within *IDLE* or *PythonWin*::
|
|||
>>> printf("Hello, %s\n", "World!")
|
||||
Hello, World!
|
||||
14
|
||||
>>> printf("Hello, %S", u"World!")
|
||||
>>> printf("Hello, %S\n", u"World!")
|
||||
Hello, World!
|
||||
13
|
||||
14
|
||||
>>> printf("%d bottles of beer\n", 42)
|
||||
42 bottles of beer
|
||||
19
|
||||
|
@ -358,7 +358,7 @@ unicode strings have to be wrapped in their corresponding ``ctypes`` type, so
|
|||
that they can be converted to the required C data type::
|
||||
|
||||
>>> printf("An int %d, a double %f\n", 1234, c_double(3.14))
|
||||
Integer 1234, double 3.1400001049
|
||||
An int 1234, a double 3.140000
|
||||
31
|
||||
>>>
|
||||
|
||||
|
@ -414,9 +414,9 @@ prototype for a C function), and tries to convert the arguments to valid types::
|
|||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in ?
|
||||
ArgumentError: argument 2: exceptions.TypeError: wrong type
|
||||
>>> printf("%s %d %f", "X", 2, 3)
|
||||
X 2 3.00000012
|
||||
12
|
||||
>>> printf("%s %d %f\n", "X", 2, 3)
|
||||
X 2 3.000000
|
||||
13
|
||||
>>>
|
||||
|
||||
If you have defined your own classes which you pass to function calls, you have
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
.. _email-examples:
|
||||
|
||||
:mod:`email`: Examples
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -1398,7 +1398,7 @@ available. They are listed here in alphabetical order.
|
|||
>>> zipped
|
||||
[(1, 4), (2, 5), (3, 6)]
|
||||
>>> x2, y2 = zip(*zipped)
|
||||
>>> x == x2, y == y2
|
||||
>>> x == list(x2) and y == list(y2)
|
||||
True
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
@ -1468,7 +1468,7 @@ available. They are listed here in alphabetical order.
|
|||
names.
|
||||
|
||||
If you simply want to import a module (potentially within a package) by name,
|
||||
you can get it from :data:`sys.modules`::
|
||||
you can call :func:`__import__` and then look it up in :data:`sys.modules`::
|
||||
|
||||
>>> import sys
|
||||
>>> name = 'foo.bar.baz'
|
||||
|
|
|
@ -1077,10 +1077,10 @@ to a particular option, or fail to pass a required option attribute,
|
|||
tells :mod:`optparse` where to write it: :attr:`dest` names an attribute of the
|
||||
``options`` object that :mod:`optparse` builds as it parses the command line.
|
||||
|
||||
* ``default`` (deprecated)
|
||||
* ``default``
|
||||
|
||||
The value to use for this option's destination if the option is not seen on the
|
||||
command line. Deprecated; use ``parser.set_defaults()`` instead.
|
||||
command line. See also ``parser.set_defaults()``.
|
||||
|
||||
* ``nargs`` (default: 1)
|
||||
|
||||
|
|
|
@ -354,7 +354,7 @@ These functions create new file objects. (See also :func:`open`.)
|
|||
is ``'r'`` (default) or ``'w'``. The *bufsize* argument has the same meaning as
|
||||
the corresponding argument to the built-in :func:`open` function. The exit
|
||||
status of the command (encoded in the format specified for :func:`wait`) is
|
||||
available as the return value of the :meth:`close` method of the file object,
|
||||
available as the return value of the :meth:`~file.close` method of the file object,
|
||||
except that when the exit status is zero (termination without errors), ``None``
|
||||
is returned. Availability: Unix, Windows.
|
||||
|
||||
|
@ -475,9 +475,9 @@ by file descriptors.
|
|||
.. note::
|
||||
|
||||
This function is intended for low-level I/O and must be applied to a file
|
||||
descriptor as returned by :func:`open` or :func:`pipe`. To close a "file
|
||||
descriptor as returned by :func:`os.open` or :func:`pipe`. To close a "file
|
||||
object" returned by the built-in function :func:`open` or by :func:`popen` or
|
||||
:func:`fdopen`, use its :meth:`close` method.
|
||||
:func:`fdopen`, use its :meth:`~file.close` method.
|
||||
|
||||
|
||||
.. function:: closerange(fd_low, fd_high)
|
||||
|
@ -604,8 +604,8 @@ by file descriptors.
|
|||
.. note::
|
||||
|
||||
This function is intended for low-level I/O. For normal usage, use the built-in
|
||||
function :func:`open`, which returns a "file object" with :meth:`read` and
|
||||
:meth:`write` methods (and many more). To wrap a file descriptor in a "file
|
||||
function :func:`open`, which returns a "file object" with :meth:`~file.read` and
|
||||
:meth:`~file.write` methods (and many more). To wrap a file descriptor in a "file
|
||||
object", use :func:`fdopen`.
|
||||
|
||||
|
||||
|
@ -634,22 +634,22 @@ by file descriptors.
|
|||
.. note::
|
||||
|
||||
This function is intended for low-level I/O and must be applied to a file
|
||||
descriptor as returned by :func:`open` or :func:`pipe`. To read a "file object"
|
||||
descriptor as returned by :func:`os.open` or :func:`pipe`. To read a "file object"
|
||||
returned by the built-in function :func:`open` or by :func:`popen` or
|
||||
:func:`fdopen`, or :data:`sys.stdin`, use its :meth:`read` or :meth:`readline`
|
||||
methods.
|
||||
:func:`fdopen`, or :data:`sys.stdin`, use its :meth:`~file.read` or
|
||||
:meth:`~file.readline` methods.
|
||||
|
||||
|
||||
.. function:: tcgetpgrp(fd)
|
||||
|
||||
Return the process group associated with the terminal given by *fd* (an open
|
||||
file descriptor as returned by :func:`open`). Availability: Unix.
|
||||
file descriptor as returned by :func:`os.open`). Availability: Unix.
|
||||
|
||||
|
||||
.. function:: tcsetpgrp(fd, pg)
|
||||
|
||||
Set the process group associated with the terminal given by *fd* (an open file
|
||||
descriptor as returned by :func:`open`) to *pg*. Availability: Unix.
|
||||
descriptor as returned by :func:`os.open`) to *pg*. Availability: Unix.
|
||||
|
||||
|
||||
.. function:: ttyname(fd)
|
||||
|
@ -667,13 +667,13 @@ by file descriptors.
|
|||
.. note::
|
||||
|
||||
This function is intended for low-level I/O and must be applied to a file
|
||||
descriptor as returned by :func:`open` or :func:`pipe`. To write a "file
|
||||
descriptor as returned by :func:`os.open` or :func:`pipe`. To write a "file
|
||||
object" returned by the built-in function :func:`open` or by :func:`popen` or
|
||||
:func:`fdopen`, or :data:`sys.stdout` or :data:`sys.stderr`, use its :meth:`write`
|
||||
method.
|
||||
:func:`fdopen`, or :data:`sys.stdout` or :data:`sys.stderr`, use its
|
||||
:meth:`~file.write` method.
|
||||
|
||||
The following constants are options for the *flags* parameter to the
|
||||
:func:`open` function. They can be combined using the bitwise OR operator
|
||||
:func:`~os.open` function. They can be combined using the bitwise OR operator
|
||||
``|``. Some of them are not available on all platforms. For descriptions of
|
||||
their availability and use, consult the :manpage:`open(2)` manual page on Unix
|
||||
or `the MSDN <http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx>` on Windows.
|
||||
|
@ -752,7 +752,7 @@ Files and Directories
|
|||
.. note::
|
||||
|
||||
Using :func:`access` to check if a user is authorized to e.g. open a file before
|
||||
actually doing so using :func:`open` creates a security hole, because the user
|
||||
actually doing so using :func:`open` creates a security hole, because the user
|
||||
might exploit the short time interval between checking and opening the file to
|
||||
manipulate it.
|
||||
|
||||
|
@ -929,7 +929,8 @@ Files and Directories
|
|||
|
||||
.. versionchanged:: 2.3
|
||||
On Windows NT/2k/XP and Unix, if *path* is a Unicode object, the result will be
|
||||
a list of Unicode objects.
|
||||
a list of Unicode objects. Undecodable filenames will still be returned as
|
||||
string objects.
|
||||
|
||||
|
||||
.. function:: lstat(path)
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
:mod:`shelve` --- Python object persistence
|
||||
===========================================
|
||||
|
||||
|
@ -40,7 +39,7 @@ lots of shared sub-objects. The keys are ordinary strings.
|
|||
entries are written back (there is no way to determine which accessed
|
||||
entries are mutable, nor which ones were actually mutated).
|
||||
|
||||
Shelve objects support all methods supported by dictionaries. This eases the
|
||||
Shelf objects support all methods supported by dictionaries. This eases the
|
||||
transition from dictionary based scripts to those requiring persistent storage.
|
||||
|
||||
One additional method is supported:
|
||||
|
|
|
@ -380,3 +380,8 @@ example doesn't do any processing of the :rfc:`822` headers. In particular, the
|
|||
server.sendmail(fromaddr, toaddrs, msg)
|
||||
server.quit()
|
||||
|
||||
.. note::
|
||||
|
||||
In general, you will want to use the :mod:`email` package's features to
|
||||
construct an email message, which you can then convert to a string and send
|
||||
via :meth:`sendmail`; see :ref:`email-examples`.
|
||||
|
|
|
@ -15,7 +15,7 @@ SQLite for internal data storage. It's also possible to prototype an
|
|||
application using SQLite and then port the code to a larger database such as
|
||||
PostgreSQL or Oracle.
|
||||
|
||||
pysqlite was written by Gerhard Häring and provides a SQL interface compliant
|
||||
sqlite3 was written by Gerhard Häring and provides a SQL interface compliant
|
||||
with the DB-API 2.0 specification described by :pep:`249`.
|
||||
|
||||
To use the module, you must first create a :class:`Connection` object that
|
||||
|
@ -52,8 +52,9 @@ is insecure; it makes your program vulnerable to an SQL injection attack.
|
|||
|
||||
Instead, use the DB-API's parameter substitution. Put ``?`` as a placeholder
|
||||
wherever you want to use a value, and then provide a tuple of values as the
|
||||
second argument to the cursor's :meth:`~Cursor.execute` method. (Other database modules
|
||||
may use a different placeholder, such as ``%s`` or ``:1``.) For example::
|
||||
second argument to the cursor's :meth:`~Cursor.execute` method. (Other database
|
||||
modules may use a different placeholder, such as ``%s`` or ``:1``.) For
|
||||
example::
|
||||
|
||||
# Never do this -- insecure!
|
||||
symbol = 'IBM'
|
||||
|
@ -92,11 +93,12 @@ This example uses the iterator form::
|
|||
.. seealso::
|
||||
|
||||
http://www.pysqlite.org
|
||||
The pysqlite web page.
|
||||
The pysqlite web page -- sqlite3 is developed externally under the name
|
||||
"pysqlite".
|
||||
|
||||
http://www.sqlite.org
|
||||
The SQLite web page; the documentation describes the syntax and the available
|
||||
data types for the supported SQL dialect.
|
||||
The SQLite web page; the documentation describes the syntax and the
|
||||
available data types for the supported SQL dialect.
|
||||
|
||||
:pep:`249` - Database API Specification 2.0
|
||||
PEP written by Marc-André Lemburg.
|
||||
|
@ -802,10 +804,10 @@ So if you are within a transaction and issue a command like ``CREATE TABLE
|
|||
...``, ``VACUUM``, ``PRAGMA``, the :mod:`sqlite3` module will commit implicitly
|
||||
before executing that command. There are two reasons for doing that. The first
|
||||
is that some of these commands don't work within transactions. The other reason
|
||||
is that pysqlite needs to keep track of the transaction state (if a transaction
|
||||
is that sqlite3 needs to keep track of the transaction state (if a transaction
|
||||
is active or not).
|
||||
|
||||
You can control which kind of ``BEGIN`` statements pysqlite implicitly executes
|
||||
You can control which kind of ``BEGIN`` statements sqlite3 implicitly executes
|
||||
(or none at all) via the *isolation_level* parameter to the :func:`connect`
|
||||
call, or via the :attr:`isolation_level` property of connections.
|
||||
|
||||
|
@ -817,8 +819,8 @@ statement, or set it to one of SQLite's supported isolation levels: "DEFERRED",
|
|||
|
||||
|
||||
|
||||
Using pysqlite efficiently
|
||||
--------------------------
|
||||
Using :mod:`sqlite3` efficiently
|
||||
--------------------------------
|
||||
|
||||
|
||||
Using shortcut methods
|
||||
|
|
|
@ -1955,7 +1955,7 @@ pairs within braces, for example: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098:
|
|||
note for :meth:`dict.items`.
|
||||
|
||||
Using :meth:`iteritems` while adding or deleting entries in the dictionary
|
||||
will raise a :exc:`RuntimeError`.
|
||||
may raise a :exc:`RuntimeError` or fail to iterate over all entries.
|
||||
|
||||
.. versionadded:: 2.2
|
||||
|
||||
|
@ -1965,7 +1965,7 @@ pairs within braces, for example: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098:
|
|||
:meth:`dict.items`.
|
||||
|
||||
Using :meth:`iterkeys` while adding or deleting entries in the dictionary
|
||||
will raise a :exc:`RuntimeError`.
|
||||
may raise a :exc:`RuntimeError` or fail to iterate over all entries.
|
||||
|
||||
.. versionadded:: 2.2
|
||||
|
||||
|
@ -1975,7 +1975,8 @@ pairs within braces, for example: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098:
|
|||
:meth:`dict.items`.
|
||||
|
||||
Using :meth:`itervalues` while adding or deleting entries in the
|
||||
dictionary will raise a :exc:`RuntimeError`.
|
||||
dictionary may raise a :exc:`RuntimeError` or fail to iterate over all
|
||||
entries.
|
||||
|
||||
.. versionadded:: 2.2
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ override the platform default list of browsers, as a os.pathsep-separated list
|
|||
of browsers to try in order. When the value of a list part contains the string
|
||||
``%s``, then it is interpreted as a literal browser command line to be used
|
||||
with the argument URL substituted for ``%s``; if the part does not contain
|
||||
``%s``, it is simply interpreted as the name of the browser to launch.
|
||||
``%s``, it is simply interpreted as the name of the browser to launch. [1]_
|
||||
|
||||
For non-Unix platforms, or when a remote browser is available on Unix, the
|
||||
controlling process will not wait for the user to finish with the browser, but
|
||||
|
@ -201,3 +201,8 @@ convenience functions:
|
|||
|
||||
.. versionadded:: 2.5
|
||||
|
||||
|
||||
.. rubric:: Footnotes
|
||||
|
||||
.. [1] Executables named here without a full path will be searched in the
|
||||
directories given in the :envvar:`PATH` environment variable.
|
||||
|
|
|
@ -30,7 +30,7 @@ DOM applications typically start by parsing some XML into a DOM. With
|
|||
The :func:`parse` function can take either a filename or an open file object.
|
||||
|
||||
|
||||
.. function:: parse(filename_or_file, parser)
|
||||
.. function:: parse(filename_or_file[, parser[, bufsize]])
|
||||
|
||||
Return a :class:`Document` from the given input. *filename_or_file* may be
|
||||
either a file name, or a file-like object. *parser*, if given, must be a SAX2
|
||||
|
|
|
@ -1858,11 +1858,11 @@ sequences, it should iterate through the values.
|
|||
reverse iteration. It should return a new iterator object that iterates
|
||||
over all the objects in the container in reverse order.
|
||||
|
||||
If the :meth:`__reversed__` method is not provided, the
|
||||
:func:`reversed` builtin will fall back to using the sequence protocol
|
||||
(:meth:`__len__` and :meth:`__getitem__`). Objects should normally
|
||||
only provide :meth:`__reversed__` if they do not support the sequence
|
||||
protocol and an efficient implementation of reverse iteration is possible.
|
||||
If the :meth:`__reversed__` method is not provided, the :func:`reversed`
|
||||
builtin will fall back to using the sequence protocol (:meth:`__len__` and
|
||||
:meth:`__getitem__`). Objects that support the sequence protocol should
|
||||
only provide :meth:`__reversed__` if they can provide an implementation
|
||||
that is more efficient than the one provided by :func:`reversed`.
|
||||
|
||||
.. versionadded:: 2.6
|
||||
|
||||
|
|
|
@ -386,9 +386,10 @@ first converted to a string using the rules for string conversions. The
|
|||
object is (converted and) written, unless the output system believes it is
|
||||
positioned at the beginning of a line. This is the case (1) when no characters
|
||||
have yet been written to standard output, (2) when the last character written to
|
||||
standard output is ``'\n'``, or (3) when the last write operation on standard
|
||||
output was not a :keyword:`print` statement. (In some cases it may be
|
||||
functional to write an empty string to standard output for this reason.)
|
||||
standard output is a whitespace character except ``' '``, or (3) when the last
|
||||
write operation on standard output was not a :keyword:`print` statement.
|
||||
(In some cases it may be functional to write an empty string to standard output
|
||||
for this reason.)
|
||||
|
||||
.. note::
|
||||
|
||||
|
|
|
@ -216,7 +216,7 @@ Raising Exceptions
|
|||
The :keyword:`raise` statement allows the programmer to force a specified
|
||||
exception to occur. For example::
|
||||
|
||||
>>> raise NameError, 'HiThere'
|
||||
>>> raise NameError('HiThere')
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in ?
|
||||
NameError: HiThere
|
||||
|
@ -231,7 +231,7 @@ handle it, a simpler form of the :keyword:`raise` statement allows you to
|
|||
re-raise the exception::
|
||||
|
||||
>>> try:
|
||||
... raise NameError, 'HiThere'
|
||||
... raise NameError('HiThere')
|
||||
... except NameError:
|
||||
... print 'An exception flew by!'
|
||||
... raise
|
||||
|
@ -263,7 +263,7 @@ directly or indirectly. For example::
|
|||
... print 'My exception occurred, value:', e.value
|
||||
...
|
||||
My exception occurred, value: 4
|
||||
>>> raise MyError, 'oops!'
|
||||
>>> raise MyError('oops!')
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in ?
|
||||
__main__.MyError: 'oops!'
|
||||
|
|
|
@ -285,11 +285,11 @@ position in the string results in an error::
|
|||
>>> word[0] = 'x'
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in ?
|
||||
TypeError: object doesn't support item assignment
|
||||
TypeError: object does not support item assignment
|
||||
>>> word[:1] = 'Splat'
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in ?
|
||||
TypeError: object doesn't support slice assignment
|
||||
TypeError: object does not support slice assignment
|
||||
|
||||
However, creating a new string with the combined content is easy and efficient::
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ def updatecache(filename, module_globals=None):
|
|||
try:
|
||||
stat = os.stat(fullname)
|
||||
except os.error, msg:
|
||||
basename = os.path.split(filename)[1]
|
||||
basename = filename
|
||||
|
||||
# Try for a __loader__, if available
|
||||
if module_globals and '__loader__' in module_globals:
|
||||
|
@ -103,7 +103,10 @@ def updatecache(filename, module_globals=None):
|
|||
)
|
||||
return cache[filename][2]
|
||||
|
||||
# Try looking through the module search path.
|
||||
# Try looking through the module search path, which is only useful
|
||||
# when handling a relative filename.
|
||||
if os.path.isabs(filename):
|
||||
return []
|
||||
|
||||
for dirname in sys.path:
|
||||
# When using imputil, sys.path may contain things other than
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
""" Tests for the linecache module """
|
||||
|
||||
import linecache
|
||||
import unittest
|
||||
import os.path
|
||||
from test import test_support as support
|
||||
|
||||
|
||||
FILENAME = linecache.__file__
|
||||
INVALID_NAME = '!@$)(!@#_1'
|
||||
EMPTY = ''
|
||||
TESTS = 'cjkencodings_test inspect_fodder inspect_fodder2 mapping_tests'
|
||||
TESTS = TESTS.split()
|
||||
TEST_PATH = os.path.dirname(support.__file__)
|
||||
MODULES = "linecache unittest".split()
|
||||
MODULE_PATH = os.path.dirname(FILENAME)
|
||||
|
||||
SOURCE_1 = '''
|
||||
" Docstring "
|
||||
|
||||
def function():
|
||||
return result
|
||||
|
||||
'''
|
||||
|
||||
SOURCE_2 = '''
|
||||
def f():
|
||||
return 1 + 1
|
||||
|
||||
a = f()
|
||||
|
||||
'''
|
||||
|
||||
class LineCacheTests(unittest.TestCase):
|
||||
|
||||
def test_getline(self):
|
||||
getline = linecache.getline
|
||||
|
||||
# Bad values for line number should return an empty string
|
||||
self.assertEquals(getline(FILENAME, 2**15), EMPTY)
|
||||
self.assertEquals(getline(FILENAME, -1), EMPTY)
|
||||
|
||||
# Float values currently raise TypeError, should it?
|
||||
self.assertRaises(TypeError, getline, FILENAME, 1.1)
|
||||
|
||||
# Bad filenames should return an empty string
|
||||
self.assertEquals(getline(EMPTY, 1), EMPTY)
|
||||
self.assertEquals(getline(INVALID_NAME, 1), EMPTY)
|
||||
|
||||
# Check whether lines correspond to those from file iteration
|
||||
for entry in TESTS:
|
||||
filename = os.path.join(TEST_PATH, entry) + '.py'
|
||||
for index, line in enumerate(open(filename)):
|
||||
self.assertEquals(line, getline(filename, index + 1))
|
||||
|
||||
# Check module loading
|
||||
for entry in MODULES:
|
||||
filename = os.path.join(MODULE_PATH, entry) + '.py'
|
||||
for index, line in enumerate(open(filename)):
|
||||
self.assertEquals(line, getline(filename, index + 1))
|
||||
|
||||
# Check that bogus data isn't returned (issue #1309567)
|
||||
empty = linecache.getlines('a/b/c/__init__.py')
|
||||
self.assertEquals(empty, [])
|
||||
|
||||
def test_clearcache(self):
|
||||
cached = []
|
||||
for entry in TESTS:
|
||||
filename = os.path.join(TEST_PATH, entry) + '.py'
|
||||
cached.append(filename)
|
||||
linecache.getline(filename, 1)
|
||||
|
||||
# Are all files cached?
|
||||
cached_empty = [fn for fn in cached if fn not in linecache.cache]
|
||||
self.assertEquals(cached_empty, [])
|
||||
|
||||
# Can we clear the cache?
|
||||
linecache.clearcache()
|
||||
cached_empty = [fn for fn in cached if fn in linecache.cache]
|
||||
self.assertEquals(cached_empty, [])
|
||||
|
||||
def test_checkcache(self):
|
||||
getline = linecache.getline
|
||||
try:
|
||||
# Create a source file and cache its contents
|
||||
source_name = os.path.join(TEST_PATH, 'linecache_test.py')
|
||||
source = open(source_name, 'w')
|
||||
source.write(SOURCE_1)
|
||||
source.close()
|
||||
getline(source_name, 1)
|
||||
|
||||
# Keep a copy of the old contents
|
||||
source_list = []
|
||||
source = open(source_name)
|
||||
for index, line in enumerate(source):
|
||||
self.assertEquals(line, getline(source_name, index + 1))
|
||||
source_list.append(line)
|
||||
source.close()
|
||||
|
||||
source = open(source_name, 'w')
|
||||
source.write(SOURCE_2)
|
||||
source.close()
|
||||
|
||||
# Try to update a bogus cache entry
|
||||
linecache.checkcache('dummy')
|
||||
|
||||
# Check that the cache matches the old contents
|
||||
for index, line in enumerate(source_list):
|
||||
self.assertEquals(line, getline(source_name, index + 1))
|
||||
|
||||
# Update the cache and check whether it matches the new source file
|
||||
linecache.checkcache(source_name)
|
||||
source = open(source_name)
|
||||
for index, line in enumerate(source):
|
||||
self.assertEquals(line, getline(source_name, index + 1))
|
||||
source_list.append(line)
|
||||
source.close()
|
||||
|
||||
finally:
|
||||
try:
|
||||
source.close()
|
||||
finally:
|
||||
support.unlink(source_name)
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(LineCacheTests)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
|
@ -220,6 +220,9 @@ Library
|
|||
- Issue #6062: In distutils, fixed the package option of build_ext. Feedback
|
||||
and tests on pywin32 by Tim Golden.
|
||||
|
||||
- Issue #1309567: Fix linecache behavior of stripping subdirectories when
|
||||
looking for files given by a relative filename.
|
||||
|
||||
- Issue #6046: Fixed the library extension when distutils build_ext is used
|
||||
inplace. Initial patch by Roumen Petrov.
|
||||
|
||||
|
|
Loading…
Reference in New Issue