mirror of
https://github.com/python/cpython.git
synced 2024-11-30 13:24:13 +08:00
bbb1e26a67
unmarshallable objects.
92 lines
4.1 KiB
TeX
92 lines
4.1 KiB
TeX
\section{Built-in Module \sectcode{marshal}}
|
|
|
|
\bimodindex{marshal}
|
|
This module contains functions that can read and write Python
|
|
values in a binary format. The format is specific to Python, but
|
|
independent of machine architecture issues (e.g., you can write a
|
|
Python value to a file on a PC, transport the file to a Sun, and read
|
|
it back there). Details of the format are undocumented on purpose;
|
|
it may change between Python versions (although it rarely does).%
|
|
\footnote{The name of this module stems from a bit of terminology used
|
|
by the designers of Modula-3 (amongst others), who use the term
|
|
``marshalling'' for shipping of data around in a self-contained form.
|
|
Strictly speaking, ``to marshal'' means to convert some data from
|
|
internal to external form (in an RPC buffer for instance) and
|
|
``unmarshalling'' for the reverse process.}
|
|
|
|
This is not a general ``persistency'' module. For general persistency
|
|
and transfer of Python objects through RPC calls, see the modules
|
|
\code{pickle} and \code{shelve}. The \code{marshal} module exists
|
|
mainly to support reading and writing the ``pseudo-compiled'' code for
|
|
Python modules of \samp{.pyc} files.
|
|
\stmodindex{pickle}
|
|
\stmodindex{shelve}
|
|
\obindex{code}
|
|
|
|
Not all Python object types are supported; in general, only objects
|
|
whose value is independent from a particular invocation of Python can
|
|
be written and read by this module. The following types are supported:
|
|
\code{None}, integers, long integers, floating point numbers,
|
|
strings, tuples, lists, dictionaries, and code objects, where it
|
|
should be understood that tuples, lists and dictionaries are only
|
|
supported as long as the values contained therein are themselves
|
|
supported; and recursive lists and dictionaries should not be written
|
|
(they will cause infinite loops).
|
|
|
|
{\bf Caveat:} On machines where C's \code{long int} type has more than
|
|
32 bits (such as the DEC Alpha), it
|
|
is possible to create plain Python integers that are longer than 32
|
|
bits. Since the current \code{marshal} module uses 32 bits to
|
|
transfer plain Python integers, such values are silently truncated.
|
|
This particularly affects the use of very long integer literals in
|
|
Python modules --- these will be accepted by the parser on such
|
|
machines, but will be silently be truncated when the module is read
|
|
from the \code{.pyc} instead.%
|
|
\footnote{A solution would be to refuse such literals in the parser,
|
|
since they are inherently non-portable. Another solution would be to
|
|
let the \code{marshal} module raise an exception when an integer value
|
|
would be truncated. At least one of these solutions will be
|
|
implemented in a future version.}
|
|
|
|
There are functions that read/write files as well as functions
|
|
operating on strings.
|
|
|
|
The module defines these functions:
|
|
|
|
\renewcommand{\indexsubitem}{(in module marshal)}
|
|
|
|
\begin{funcdesc}{dump}{value\, file}
|
|
Write the value on the open file. The value must be a supported
|
|
type. The file must be an open file object such as
|
|
\code{sys.stdout} or returned by \code{open()} or
|
|
\code{posix.popen()}.
|
|
|
|
If the value has (or contains an object that has) an unsupported type,
|
|
a \code{ValueError} exception is raised -- but garbage data will also
|
|
be written to the file. The object will not be properly read back by
|
|
\code{load()}.
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{load}{file}
|
|
Read one value from the open file and return it. If no valid value
|
|
is read, raise \code{EOFError}, \code{ValueError} or
|
|
\code{TypeError}. The file must be an open file object.
|
|
|
|
Warning: If an object containing an unsupported type was marshalled
|
|
with \code{dump()}, \code{load()} will substitute \code{None} for the
|
|
unmarshallable type.
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{dumps}{value}
|
|
Return the string that would be written to a file by
|
|
\code{dump(value, file)}. The value must be a supported type.
|
|
Raise a \code{ValueError} exception if value has (or contains an
|
|
object that has) an unsupported type.
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{loads}{string}
|
|
Convert the string to a value. If no valid value is found, raise
|
|
\code{EOFError}, \code{ValueError} or \code{TypeError}. Extra
|
|
characters in the string are ignored.
|
|
\end{funcdesc}
|