summaryrefslogtreecommitdiffstats
path: root/Lib/os.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/os.py')
-rw-r--r--Lib/os.py21
1 files changed, 9 insertions, 12 deletions
diff --git a/Lib/os.py b/Lib/os.py
index 807ddb5..4f9fdf5 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -23,7 +23,7 @@ and opendir), and leave all pathname manipulation to os.path
#'
import abc
-import sys, errno
+import sys
import stat as st
_names = sys.builtin_module_names
@@ -590,12 +590,10 @@ def _execvpe(file, args, env=None):
argrest = (args,)
env = environ
- head, tail = path.split(file)
- if head:
+ if path.dirname(file):
exec_func(file, *argrest)
return
- last_exc = saved_exc = None
- saved_tb = None
+ saved_exc = None
path_list = get_exec_path(env)
if name != 'nt':
file = fsencode(file)
@@ -604,16 +602,15 @@ def _execvpe(file, args, env=None):
fullname = path.join(dir, file)
try:
exec_func(fullname, *argrest)
+ except (FileNotFoundError, NotADirectoryError) as e:
+ last_exc = e
except OSError as e:
last_exc = e
- tb = sys.exc_info()[2]
- if (e.errno != errno.ENOENT and e.errno != errno.ENOTDIR
- and saved_exc is None):
+ if saved_exc is None:
saved_exc = e
- saved_tb = tb
- if saved_exc:
- raise saved_exc.with_traceback(saved_tb)
- raise last_exc.with_traceback(tb)
+ if saved_exc is not None:
+ raise saved_exc
+ raise last_exc
def get_exec_path(env=None):