diff --git a/Doc/tools/buildindex.py b/Doc/tools/buildindex.py
index 5870462cd54..8b24cc57e85 100755
--- a/Doc/tools/buildindex.py
+++ b/Doc/tools/buildindex.py
@@ -37,6 +37,15 @@ class Node:
# build up the text
self.text = split_entry_text(str)
self.key = split_entry_key(str)
+
+ def __eq__(self, other):
+ return cmp(self, other) == 0
+
+ def __lt__(self, other):
+ return cmp(self, other) == -1
+
+ def __gt__(self, other):
+ return cmp(self, other) == 1
def __cmp__(self, other):
"""Comparison operator includes sequence number, for use with
@@ -380,8 +389,8 @@ def main():
sys.stderr.write("\n%s: %d index nodes" % (program, num_nodes))
else:
open(ofn, "w").write(html)
- print
- print "%s: %d index nodes" % (program, num_nodes)
+ print()
+ print("%s: %d index nodes" % (program, num_nodes))
if __name__ == "__main__":
diff --git a/Doc/tools/custlib.py b/Doc/tools/custlib.py
index 15f07baf0e5..8224b2c6bbd 100644
--- a/Doc/tools/custlib.py
+++ b/Doc/tools/custlib.py
@@ -31,7 +31,7 @@ for dir in sys.path:
modules[base.lower()] = base
# Minor oddity: the types module is documented in libtypes2.tex
-if modules.has_key('types'):
+if 'types' in modules:
del modules['types']
modules['types2'] = None
@@ -44,8 +44,8 @@ for file in filelist:
modname = file[3:-4]
docs[modname] = modname
-mlist = modules.keys()
-mlist = filter(lambda x, docs=docs: docs.has_key(x), mlist)
+mlist = list(modules.keys())
+mlist = filter(lambda x, docs=docs: x in docs, mlist)
mlist.sort()
mlist = map(lambda x, docs=docs: docs[x], mlist)
@@ -55,7 +55,7 @@ modules = mlist
# Write the boilerplate
# XXX should be fancied up.
-print """\documentstyle[twoside,11pt,myformat]{report}
+print("""\documentstyle[twoside,11pt,myformat]{report}
\\title{Python Library Reference}
\\input{boilerplate}
\\makeindex % tell \\index to actually write the .idx file
@@ -68,11 +68,11 @@ print """\documentstyle[twoside,11pt,myformat]{report}
\\end{abstract}
\\pagebreak
{\\parskip = 0mm \\tableofcontents}
-\\pagebreak\\pagenumbering{arabic}"""
+\\pagebreak\\pagenumbering{arabic}""")
for modname in mlist:
- print "\\input{lib%s}" % (modname,)
+ print("\\input{lib%s}" % (modname,))
# Write the end
-print """\\input{custlib.ind} % Index
-\\end{document}"""
+print("""\\input{custlib.ind} % Index
+\\end{document}""")
diff --git a/Doc/tools/getversioninfo b/Doc/tools/getversioninfo
index d22c16ddc04..c1998d51ddb 100755
--- a/Doc/tools/getversioninfo
+++ b/Doc/tools/getversioninfo
@@ -68,4 +68,4 @@ write_file(patchlevel_tex,
"\\setshortversion{%s}\n"
% (release, releaseinfo, shortversion))
-print release + releaseinfo
+print(release + releaseinfo)
diff --git a/Doc/tools/keywords.py b/Doc/tools/keywords.py
index 33440214780..f9e4b032b1e 100644
--- a/Doc/tools/keywords.py
+++ b/Doc/tools/keywords.py
@@ -21,5 +21,5 @@ ncols = 5
nrows = (len(l)+ncols-1)/ncols
for i in range(nrows):
for j in range(i, len(l), nrows):
- print l[j].ljust(10),
- print
+ print(l[j].ljust(10), end=' ')
+ print()
diff --git a/Doc/tools/listmodules.py b/Doc/tools/listmodules.py
index 5f3ea026a32..8acdf435175 100644
--- a/Doc/tools/listmodules.py
+++ b/Doc/tools/listmodules.py
@@ -40,8 +40,7 @@ def main():
for p in path:
modules.update(getmodules(p))
- keys = modules.keys()
- keys.sort()
+ keys = sorted(modules.keys())
# filter out known test packages
def cb(m):
@@ -79,7 +78,7 @@ def main():
if out is not sys.stdout:
out.close()
- print out.name, "ok (%d modules)" % len(modules)
+ print(out.name, "ok (%d modules)" % len(modules))
def getmodules(p):
# get modules in a given directory
diff --git a/Doc/tools/mkackshtml b/Doc/tools/mkackshtml
index 2c79f5eb106..b5fe7ba929f 100755
--- a/Doc/tools/mkackshtml
+++ b/Doc/tools/mkackshtml
@@ -26,7 +26,7 @@ def main():
options.variables["title"] = "Acknowledgements"
options.parse(sys.argv[1:])
names = collect(sys.stdin)
- percol = (len(names) + options.columns - 1) / options.columns
+ percol = (len(names) + options.columns - 1) // options.columns
colnums = []
for i in range(options.columns):
colnums.append(percol*i)
diff --git a/Doc/tools/mkhowto b/Doc/tools/mkhowto
index 02a215d04b0..fa259e074f2 100755
--- a/Doc/tools/mkhowto
+++ b/Doc/tools/mkhowto
@@ -65,11 +65,11 @@ PYTHON_BINARY = "python"
def usage(options, file):
- print >>file, __doc__ % options
+ print(__doc__ % options, file=file)
def error(options, message, err=2):
- print >>sys.stderr, message
- print >>sys.stderr
+ print(message, file=sys.stderr)
+ print(file=sys.stderr)
usage(options, sys.stderr)
sys.exit(2)
@@ -132,7 +132,7 @@ class Options:
try:
return getattr(self, key)
except AttributeError:
- raise KeyError, key
+ raise KeyError(key)
def parse(self, args):
opts, args = getopt.getopt(args, "Hi:a:s:lDkqr:",
@@ -289,7 +289,7 @@ class Job:
if not imgs:
self.warning(
"Could not locate support images of type %s."
- % `self.options.image_type`)
+ % repr(self.options.image_type))
for fn in imgs:
new_fn = os.path.join(self.builddir, os.path.basename(fn))
shutil.copyfile(fn, new_fn)
@@ -534,7 +534,7 @@ class Job:
def message(self, msg):
msg = "+++ " + msg
if not self.options.quiet:
- print msg
+ print(msg)
self.log(msg + "\n")
def warning(self, msg):
diff --git a/Doc/tools/mkmodindex b/Doc/tools/mkmodindex
index 8e869f9266b..cdc9d4242a2 100755
--- a/Doc/tools/mkmodindex
+++ b/Doc/tools/mkmodindex
@@ -49,7 +49,7 @@ class IndexOptions(support.Options):
def usage(self):
program = os.path.basename(sys.argv[0])
- print __doc__ % {"program": program}
+ print(__doc__ % {"program": program})
links = [
('author', 'acks.html', 'Acknowledgements'),
@@ -143,8 +143,8 @@ def main():
if options.outputfile == "-":
sys.stderr.write("%s: %d index nodes\n" % (program, num_nodes))
else:
- print
- print "%s: %d index nodes" % (program, num_nodes)
+ print()
+ print("%s: %d index nodes" % (program, num_nodes))
PLAT_DISCUSS = """
diff --git a/Doc/tools/prechm.py b/Doc/tools/prechm.py
index db1f9655322..b24eea0ebb2 100644
--- a/Doc/tools/prechm.py
+++ b/Doc/tools/prechm.py
@@ -413,7 +413,7 @@ def content(path, contentpage, output):
def do_index(library, output):
output.write('
\n')
for book in library:
- print '\t', book.title, '-', book.indexpage
+ print('\t', book.title, '-', book.indexpage)
if book.indexpage:
index(book.directory, book.indexpage, output)
output.write('
\n')
@@ -421,7 +421,7 @@ def do_index(library, output):
def do_content(library, version, output):
output.write(contents_header)
for book in library:
- print '\t', book.title, '-', book.firstpage
+ print('\t', book.title, '-', book.firstpage)
path = book.directory + "/" + book.firstpage
output.write('')
output.write(object_sitemap % (book.title, path))
@@ -449,12 +449,12 @@ def openfile(file):
try:
p = open(file, "w")
except IOError as msg:
- print file, ":", msg
+ print(file, ":", msg)
sys.exit(1)
return p
def usage():
- print usage_mode
+ print(usage_mode)
sys.exit(0)
def do_it(args = None):
@@ -467,7 +467,7 @@ def do_it(args = None):
try:
optlist, args = getopt.getopt(args, 'ckpv:')
except getopt.error as msg:
- print msg
+ print(msg)
usage()
if not args or len(args) > 1:
@@ -487,15 +487,15 @@ def do_it(args = None):
if not (('-p','') in optlist):
fname = arch + '.stp'
f = openfile(fname)
- print "Building stoplist", fname, "..."
+ print("Building stoplist", fname, "...")
words = stop_list.split()
words.sort()
for word in words:
- print >> f, word
+ print(word, file=f)
f.close()
f = openfile(arch + '.hhp')
- print "Building Project..."
+ print("Building Project...")
do_project(library, f, arch, version)
if version == '2.0.0':
for image in os.listdir('icons'):
@@ -505,13 +505,13 @@ def do_it(args = None):
if not (('-c','') in optlist):
f = openfile(arch + '.hhc')
- print "Building Table of Content..."
+ print("Building Table of Content...")
do_content(library, version, f)
f.close()
if not (('-k','') in optlist):
f = openfile(arch + '.hhk')
- print "Building Index..."
+ print("Building Index...")
do_index(library, f)
f.close()
diff --git a/Doc/tools/refcounts.py b/Doc/tools/refcounts.py
index ccfc8c609e4..9efb07303a8 100644
--- a/Doc/tools/refcounts.py
+++ b/Doc/tools/refcounts.py
@@ -69,24 +69,23 @@ class Entry:
def dump(d):
"""Dump the data in the 'canonical' format, with functions in
sorted order."""
- items = d.items()
- items.sort()
+ items = sorted(d.items())
first = 1
for k, entry in items:
if first:
first = 0
else:
- print
+ print()
s = entry.name + ":%s:%s:%s:"
if entry.result_refs is None:
r = ""
else:
r = entry.result_refs
- print s % (entry.result_type, "", r)
+ print(s % (entry.result_type, "", r))
for t, n, r in entry.args:
if r is None:
r = ""
- print s % (t, n, r)
+ print(s % (t, n, r))
def main():
diff --git a/Doc/tools/sgmlconv/docfixer.py b/Doc/tools/sgmlconv/docfixer.py
index 961e3b8f681..9f939660771 100755
--- a/Doc/tools/sgmlconv/docfixer.py
+++ b/Doc/tools/sgmlconv/docfixer.py
@@ -210,8 +210,7 @@ def rewrite_descriptor(doc, descriptor):
# 2a.
if descriptor.hasAttribute("var"):
if descname != "opcodedesc":
- raise RuntimeError, \
- "got 'var' attribute on descriptor other than opcodedesc"
+ raise RuntimeError("got 'var' attribute on descriptor other than opcodedesc")
variable = descriptor.getAttribute("var")
if variable:
args = doc.createElement("args")
@@ -241,7 +240,7 @@ def rewrite_descriptor(doc, descriptor):
try:
sig = methodline_to_signature(doc, children[pos])
except KeyError:
- print oldchild.toxml()
+ print(oldchild.toxml())
raise
newchildren.append(sig)
else:
@@ -347,7 +346,7 @@ def fixup_trailing_whitespace(doc, fragment, wsmap):
while queue:
node = queue[0]
del queue[0]
- if wsmap.has_key(node.nodeName):
+ if node.nodeName in wsmap:
fixups.append(node)
for child in node.childNodes:
if child.nodeType == ELEMENT:
@@ -962,8 +961,7 @@ def write_esis(doc, ofp, knownempty):
gi = node.tagName
if knownempty(gi):
if node.hasChildNodes():
- raise ValueError, \
- "declared-empty node <%s> has children" % gi
+ raise ValueError("declared-empty node <%s> has children" % gi)
ofp.write("e\n")
for k, value in node.attributes.items():
if _token_rx.match(value):
@@ -979,7 +977,7 @@ def write_esis(doc, ofp, knownempty):
elif nodeType == ENTITY_REFERENCE:
ofp.write("&%s\n" % node.nodeName)
else:
- raise RuntimeError, "unsupported node type: %s" % nodeType
+ raise RuntimeError("unsupported node type: %s" % nodeType)
def convert(ifp, ofp):
@@ -1033,7 +1031,7 @@ def convert(ifp, ofp):
for gi in events.parser.get_empties():
d[gi] = gi
for key in ("author", "pep", "rfc"):
- if d.has_key(key):
+ if key in d:
del d[key]
knownempty = d.has_key
#
diff --git a/Doc/tools/sgmlconv/esis2sgml.py b/Doc/tools/sgmlconv/esis2sgml.py
index 81294d1d083..10ec83ac6a3 100755
--- a/Doc/tools/sgmlconv/esis2sgml.py
+++ b/Doc/tools/sgmlconv/esis2sgml.py
@@ -44,8 +44,7 @@ def null_map_gi(sgmlgi, map):
def format_attrs(attrs, xml=0):
- attrs = attrs.items()
- attrs.sort()
+ attrs = sorted(attrs.items())
parts = []
append = parts.append
for name, value in attrs:
@@ -149,7 +148,7 @@ def convert(ifp, ofp, xml=0, autoclose=(), verbatims=()):
ofp.write("&%s;" % data)
knownempty = 0
else:
- raise RuntimeError, "unrecognized ESIS event type: '%s'" % type
+ raise RuntimeError("unrecognized ESIS event type: '%s'" % type)
if LIST_EMPTIES:
dump_empty_element_names(knownempties)
@@ -170,8 +169,7 @@ def dump_empty_element_names(knownempties):
if gi:
d[gi] = gi
fp = open(EMPTIES_FILENAME, "w")
- gilist = d.keys()
- gilist.sort()
+ gilist = sorted(d.keys())
fp.write("\n".join(gilist))
fp.write("\n")
fp.close()
diff --git a/Doc/tools/sgmlconv/esistools.py b/Doc/tools/sgmlconv/esistools.py
index 6dc5eaa8a19..11f458edec4 100644
--- a/Doc/tools/sgmlconv/esistools.py
+++ b/Doc/tools/sgmlconv/esistools.py
@@ -29,7 +29,7 @@ def decode(s):
n, s = s.split(";", 1)
r = r + unichr(int(n))
else:
- raise ValueError, "can't handle %r" % s
+ raise ValueError("can't handle %r" % s)
return r
@@ -80,7 +80,7 @@ class ESISReader(xml.sax.xmlreader.XMLReader):
self.setErrorHandler(errorHandler)
def get_empties(self):
- return self._empties.keys()
+ return list(self._empties.keys())
#
# XMLReader interface
@@ -270,7 +270,7 @@ class Attributes(xml.sax.xmlreader.AttributesImpl):
return self._attrs[name][0]
def get(self, name, default=None):
- if self._attrs.has_key(name):
+ if name in self._attrs:
return self._attrs[name][0]
return default
@@ -282,7 +282,7 @@ class Attributes(xml.sax.xmlreader.AttributesImpl):
def values(self):
L = []
- for value, type in self._attrs.values():
+ for value, type in list(self._attrs.values()):
L.append(value)
return L
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index cbc98282282..3ee86e320e4 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -472,7 +472,7 @@ class TableHandler(xml.sax.handler.ContentHandler):
name = attrs["name"]
self.__current = TableEntry(name, environment=1)
self.__current.verbatim = attrs.get("verbatim") == "yes"
- if attrs.has_key("outputname"):
+ if "outputname" in attrs:
self.__current.outputname = attrs.get("outputname")
self.__current.endcloses = attrs.get("endcloses", "").split()
def end_environment(self):
@@ -482,11 +482,11 @@ class TableHandler(xml.sax.handler.ContentHandler):
name = attrs["name"]
self.__current = TableEntry(name)
self.__current.closes = attrs.get("closes", "").split()
- if attrs.has_key("outputname"):
+ if "outputname" in attrs:
self.__current.outputname = attrs.get("outputname")
def end_macro(self):
name = self.__current.name
- if self.__table.has_key(name):
+ if name in self.__table:
raise ValueError("name %r already in use" % (name,))
self.__table[name] = self.__current
self.__current = None
diff --git a/Doc/tools/undoc_symbols.py b/Doc/tools/undoc_symbols.py
index 782ab6ca939..14cb9414156 100644
--- a/Doc/tools/undoc_symbols.py
+++ b/Doc/tools/undoc_symbols.py
@@ -80,11 +80,10 @@ def print_undoc_symbols(prefix, docdir, incdir):
fp = os.popen("ctags -IPyAPI_FUNC -IPy_GCC_ATTRIBUTE --c-types=%s -f - %s"
% (TAG_KINDS, incfiles))
dict = findnames(fp, prefix)
- names = dict.keys()
- names.sort()
+ names = sorted(dict.keys())
for name in names:
if not re.search("%s\\W" % name, docs):
- print dict[name], name
+ print(dict[name], name)
if __name__ == '__main__':
srcdir = os.path.dirname(sys.argv[0])