marshal
This is not a general ``persistency'' module. For general persistency
and transfer of Python objects through RPC calls, see the modules
pickle
and shelve
. The marshal
module exists
mainly to support reading and writing the ``pseudo-compiled'' code for
Python modules of `.pyc' files.
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:
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).
Caveat: On machines where C's 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 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 .pyc
instead.(2)
There are functions that read/write files as well as functions operating on strings.
The module defines these functions:
sys.stdout
or returned by open()
or
posix.popen()
.
If the value has an unsupported type, garbage is written which cannot
be read back by load()
.
EOFError
, ValueError
or
TypeError
. The file must be an open file object.
dump(value, file)
. The value must be a supported type.
EOFError
, ValueError
or TypeError
. Extra
characters in the string are ignored.
(2)
A solution would be to refuse such literals in the parser,
since they are inherently non-portable. Another solution would be to
let the 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.