mirror of
https://github.com/python/cpython.git
synced 2025-09-29 19:56:59 +00:00
[3.12] gh-108791: Fix pdb CLI invalid argument handling (GH-108816) (#111064)
* [3.12] gh-108791: Fix `pdb` CLI invalid argument handling (GH-108816)
(cherry picked from commit 162213f2db
)
Co-authored-by: Radislav Chugunov <52372310+chgnrdv@users.noreply.github.com>
This commit is contained in:
parent
40db34c901
commit
68a5640a36
3 changed files with 24 additions and 2 deletions
|
@ -136,6 +136,9 @@ class _ScriptTarget(str):
|
||||||
if not os.path.exists(self):
|
if not os.path.exists(self):
|
||||||
print('Error:', self.orig, 'does not exist')
|
print('Error:', self.orig, 'does not exist')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
if os.path.isdir(self):
|
||||||
|
print('Error:', self.orig, 'is a directory')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# Replace pdb's dir with script's dir in front of module search path.
|
# Replace pdb's dir with script's dir in front of module search path.
|
||||||
sys.path[0] = os.path.dirname(self)
|
sys.path[0] = os.path.dirname(self)
|
||||||
|
@ -162,6 +165,9 @@ class _ModuleTarget(str):
|
||||||
def check(self):
|
def check(self):
|
||||||
try:
|
try:
|
||||||
self._details
|
self._details
|
||||||
|
except ImportError as e:
|
||||||
|
print(f"ImportError: {e}")
|
||||||
|
sys.exit(1)
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -2301,8 +2301,7 @@ def bœr():
|
||||||
stdout, stderr = self._run_pdb(
|
stdout, stderr = self._run_pdb(
|
||||||
['-m', module_name], "", expected_returncode=1
|
['-m', module_name], "", expected_returncode=1
|
||||||
)
|
)
|
||||||
self.assertIn("ImportError: No module named t_main.__main__",
|
self.assertIn("ImportError: No module named t_main.__main__;", stdout)
|
||||||
stdout.splitlines())
|
|
||||||
|
|
||||||
def test_package_without_a_main(self):
|
def test_package_without_a_main(self):
|
||||||
pkg_name = 't_pkg'
|
pkg_name = 't_pkg'
|
||||||
|
@ -2320,6 +2319,22 @@ def bœr():
|
||||||
"'t_pkg.t_main' is a package and cannot be directly executed",
|
"'t_pkg.t_main' is a package and cannot be directly executed",
|
||||||
stdout)
|
stdout)
|
||||||
|
|
||||||
|
def test_nonexistent_module(self):
|
||||||
|
assert not os.path.exists(os_helper.TESTFN)
|
||||||
|
stdout, stderr = self._run_pdb(["-m", os_helper.TESTFN], "", expected_returncode=1)
|
||||||
|
self.assertIn(f"ImportError: No module named {os_helper.TESTFN}", stdout)
|
||||||
|
|
||||||
|
def test_dir_as_script(self):
|
||||||
|
with os_helper.temp_dir() as temp_dir:
|
||||||
|
stdout, stderr = self._run_pdb([temp_dir], "", expected_returncode=1)
|
||||||
|
self.assertIn(f"Error: {temp_dir} is a directory", stdout)
|
||||||
|
|
||||||
|
def test_invalid_cmd_line_options(self):
|
||||||
|
stdout, stderr = self._run_pdb(["-c"], "", expected_returncode=1)
|
||||||
|
self.assertIn(f"Error: option -c requires argument", stdout)
|
||||||
|
stdout, stderr = self._run_pdb(["--spam"], "", expected_returncode=1)
|
||||||
|
self.assertIn(f"Error: option --spam not recognized", stdout)
|
||||||
|
|
||||||
def test_blocks_at_first_code_line(self):
|
def test_blocks_at_first_code_line(self):
|
||||||
script = """
|
script = """
|
||||||
#This is a comment, on line 2
|
#This is a comment, on line 2
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Improved error handling in :mod:`pdb` command line interface, making it produce more concise error messages.
|
Loading…
Add table
Add a link
Reference in a new issue