If you return `''`,the empty path, instead of None, then you can remove the None check from `get_executable` since `os.access('', os.X_OK)` returns False.

Then you can also remove the None check in `has_executable()` and replace it with a try/except OSError, so that we don't have to check for None in the normal path.  EAFP instead of LBYL.