diff -r e15c554cd43e Lib/doctest.py --- a/Lib/doctest.py Tue Jun 26 09:43:40 2012 +0200 +++ b/Lib/doctest.py Tue Jul 03 09:09:17 2012 +0200 @@ -2695,6 +2695,11 @@ """, } +def _print_files_report(read, unread): + print('Test files read successfully: {0}'.format(read)) + if unread: + print('Unreadable files: {0}'.format(unread)) + def _test(): testfiles = [arg for arg in sys.argv[1:] if arg and arg[0] != '-'] @@ -2704,21 +2709,34 @@ name, _ = os.path.splitext(name) print("usage: {0} [-v] file ...".format(name)) return 2 + read_files = 0 + unread_files = 0 for filename in testfiles: - if filename.endswith(".py"): - # It is a module -- insert its dir into sys.path and try to - # import it. If it is part of a package, that possibly - # won't work because of package imports. - dirname, filename = os.path.split(filename) - sys.path.insert(0, dirname) - m = __import__(filename[:-3]) - del sys.path[0] - failures, _ = testmod(m) + try: + if filename.endswith(".py"): + # It is a module -- insert its dir into sys.path and try to + # import it. If it is part of a package, that possibly + # won't work because of package imports. + dirname, filename = os.path.split(filename) + sys.path.insert(0, dirname) + m = __import__(filename[:-3]) + del sys.path[0] + failures, _ = testmod(m) + else: + failures, _ = testfile(filename, module_relative=False) + if failures: + _print_files_report(read_files, unread_files) + return 1 + except IOError as e: + print("Cannot read '{0}': {1}".format(filename, e)) + unread_files += 1 else: - failures, _ = testfile(filename, module_relative=False) - if failures: - return 1 - return 0 + read_files += 1 + if unread_files: + _print_files_report(read_files, unread_files) + return 3 + else: + return 0 if __name__ == "__main__":