4702l2 Listing 2. Needs caption #!/usr/bin/env python """PathFinder.py This module resolves pathnames relative to the Python path.""" import sys, os class Error(Exception): """Raised when a pathname cannot be resolved.""" def find(pathname): """Resolve pathname to a location on the Python path.""" if os.path.isabs(pathname): return pathname for dirname in sys.path: candidate = os.path.join(dirname, pathname) if os.path.isfile(candidate): return candidate raise Error("Cannot find %s on the Python path." % `pathname`) def main(): """Module mainline (for standalone execution)""" def testFind(path, expectError=0): """Try to resolve path, with diagnostic messages.""" print "Resolving %s..." % path try: print find(path) except Error, info: if expectError: print "As expected:", info else: print "ERROR:", info # Try to find something known to be on the path, using both # relative and absolute paths. testFind("socket.py") join = os.path.join socketPath = join(sys.prefix, join("lib", join("python", "socket.py"))) testFind(socketPath) # Try to find something which probably doesn't exist. testFind("I_Dont_Exist.nonexistent_path", 1) if __name__ == "__main__": main()