Issue 16450: test_missing_localfile masks problems in urlopen (original) (raw)

Due to a misconfiguration, urllib.thishost() raises an IOError on my laptop. This causes urllib.urlopen to raise an exception. A flaw in test_missing_localfile causes this exception to not be reported. The problem happens at line 230-235:

    try:
        self.assertTrue(os.path.exists(tmp_file))
        fp = urllib.urlopen(tmp_fileurl)
    finally:
        os.close(fd)
        fp.close()

On my laptop, urllib.urlopen raises a socket.gaierror. This means that the variable fp is never set, and the fp.close() at line 235 raises an UnboundLoccalError, masking the socket error.

A quick fix would be:

    try:
        self.assertTrue(os.path.exists(tmp_file))
        fp = urllib.urlopen(tmp_fileurl)
        fp.close()
    finally:
        os.close(fd)

That way, the .close is only attempted if the open succeeds.

I noticed this only after I had a misconfigured hostname on my mac. Fixing my hostname of course solved the problem, but in any case, changed the tests so that we wont be baffled by the unexpected (and misdirected error msg) from test for misconfigured hostname.

Thanks for bug report, Hans Mulder and sorry for taking long time to get to this.