.. testsetup::
- >>> from email import message_from_binary_file
- >>> with open('Lib/test/test_email/data/msg_16.txt', 'rb') as f:
- ... msg = message_from_binary_file(f)
- >>> from email.iterators import _structure
+ import email
+ from email import message_from_binary_file
+ from os.path import join, dirname
+ lib_dir = dirname(dirname(email.__file__))
+ file_path = join(lib_dir, 'test/test_email/data/msg_16.txt')
+ with open(file_path, 'rb') as f:
+ msg = message_from_binary_file(f)
+ from email.iterators import _structure
.. doctest::
.. doctest::
>>> for part in msg.walk():
- ... print(part.get_content_maintype() == 'multipart'),
+ ... print(part.get_content_maintype() == 'multipart',
... part.is_multipart())
True True
False False
>>> _structure(msg)
multipart/report
text/plain
- message/delivery-status
- text/plain
- text/plain
- message/rfc822
- text/plain
+ message/delivery-status
+ text/plain
+ text/plain
+ message/rfc822
+ text/plain
Here the ``message`` parts are not ``multiparts``, but they do contain
subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends
The resulting list is sorted alphabetically. For example:
>>> import struct
- >>> dir() # show the names in the module namespace
+ >>> dir() # show the names in the module namespace # doctest: +SKIP
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module # doctest: +SKIP
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
.. versionadded:: 3.3
.. testsetup::
- >>> import ipaddress
- >>> from ipaddress import (ip_network, IPv4Address, IPv4Interface,
- ... IPv4Network)
+
+ import ipaddress
+ from ipaddress import (
+ ip_network, IPv4Address, IPv4Interface, IPv4Network,
+ )
Convenience factory functions
-----------------------------
same thread. If a recursive call is made, the *fillvalue* is returned,
otherwise, the usual :meth:`__repr__` call is made. For example:
+ >>> from reprlib import recursive_repr
>>> class MyList(list):
... @recursive_repr()
... def __repr__(self):
string that can safely be used as one token in a shell command line, for
cases where you cannot use a list.
- This idiom would be unsafe::
+ This idiom would be unsafe:
>>> filename = 'somefile; rm -rf ~'
>>> command = 'ls -l {}'.format(filename)
>>> print(command) # executed by a shell: boom!
ls -l somefile; rm -rf ~
- :func:`quote` lets you plug the security hole::
+ :func:`quote` lets you plug the security hole:
+ >>> from shlex import quote
>>> command = 'ls -l {}'.format(quote(filename))
>>> print(command)
ls -l 'somefile; rm -rf ~'
The quoting is compatible with UNIX shells and with :func:`split`:
+ >>> from shlex import split
>>> remote_command = split(remote_command)
>>> remote_command
['ssh', 'home', "ls -l 'somefile; rm -rf ~'"]
input is presumed to be a relative URL and thus to start with
a path component.
+ .. doctest::
+ :options: +NORMALIZE_WHITESPACE
+
>>> from urllib.parse import urlparse
>>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
error function <https://en.wikipedia.org/wiki/Error_function>`_. The
complementary error function, :func:`~math.erfc`, is ``1 - erf(x)``:
->>> from math import erf, erfc, sqrt
->>> erf(1.0/sqrt(2.0)) # portion of normal distribution within 1 standard deviation
-0.682689492137086
->>> erfc(1.0/sqrt(2.0)) # portion of normal distribution outside 1 standard deviation
-0.31731050786291404
->>> erf(1.0/sqrt(2.0)) + erfc(1.0/sqrt(2.0))
-1.0
+.. doctest::
+ :options: +SKIP
+
+ >>> from math import erf, erfc, sqrt
+ >>> erf(1.0/sqrt(2.0)) # portion of normal distribution within 1 standard deviation
+ 0.682689492137086
+ >>> erfc(1.0/sqrt(2.0)) # portion of normal distribution outside 1 standard deviation
+ 0.31731050786291404
+ >>> erf(1.0/sqrt(2.0)) + erfc(1.0/sqrt(2.0))
+ 1.0
The :func:`~math.gamma` function is a continuous extension of the factorial
function. See https://en.wikipedia.org/wiki/Gamma_function for details. Because
for writing.
>>> import select
->>> select.PIPE_BUF
+>>> select.PIPE_BUF # doctest: +SKIP
512
(Available on Unix systems. Patch by Sébastien Sablé in :issue:`9862`)