Index: Lib/test/test_format.py =================================================================== --- Lib/test/test_format.py (revision 76872) +++ Lib/test/test_format.py (working copy) @@ -264,6 +264,30 @@ else: raise TestFailed('"%*d"%(maxsize, -127) should fail') + +def with_tolerant_stdout(f): + """Decorator to silence UnicodeEncodeError on standard output. + + Example: when standard output is connected to a pipe. + """ + import codecs + stdout_encoding = codecs.lookup(sys.stdout.encoding).name + if stdout_encoding == 'utf-8': + return f + def wrapper(): + stdout_write = sys.stdout.write + def safe_write(data): + safe_data = data.encode(stdout_encoding, 'backslashreplace').decode(stdout_encoding) + return stdout_write(safe_data) + sys.stdout.write = safe_write + try: + f() + finally: + sys.stdout.write = stdout_write + return wrapper + + +@with_tolerant_stdout def test_main(): support.run_unittest(FormatTest)