urllib.urlopen throws OSError when processing file:// (local file) URLs and an error is encountered. It should instead throw IOError in these cases to be consistent with the built-in open function and with the urllib documentation. A patch is attached. See bug report 482171 for an example of the consequences of this bug (which was hacked around for Python 2.2 it appears). The bug also impacts 4Suite's XSLT processor (using include paths causes an unhandled exception).