From 2cb4661707818cfd92556e7fdf9068a993577002 Mon Sep 17 00:00:00 2001 From: Matt Eaton Date: Tue, 20 Mar 2018 01:41:37 -0500 Subject: [PATCH] bpo-33034: Improve exception message when cast fails for {Parse,Split}Result.port (GH-6078) --- Lib/test/test_urlparse.py | 10 ++++++++++ Lib/urllib/parse.py | 6 +++++- .../Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index ddee1c38d8b..9d512179283 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -936,6 +936,16 @@ def test_issue14072(self): self.assertEqual(p2.scheme, 'tel') self.assertEqual(p2.path, '+31641044153') + def test_port_casting_failure_message(self): + message = "Port could not be cast to integer value as 'oracle'" + p1 = urllib.parse.urlparse('http://Server=sde; Service=sde:oracle') + with self.assertRaisesRegex(ValueError, message): + p1.port + + p2 = urllib.parse.urlsplit('http://Server=sde; Service=sde:oracle') + with self.assertRaisesRegex(ValueError, message): + p2.port + def test_telurl_params(self): p1 = urllib.parse.urlparse('tel:123-4;phone-context=+1-650-516') self.assertEqual(p1.scheme, 'tel') diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 58460f9234f..3f8cfe5300c 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -166,7 +166,11 @@ def hostname(self): def port(self): port = self._hostinfo[1] if port is not None: - port = int(port, 10) + try: + port = int(port, 10) + except ValueError: + message = f'Port could not be cast to integer value as {port!r}' + raise ValueError(message) from None if not ( 0 <= port <= 65535): raise ValueError("Port out of range 0-65535") return port diff --git a/Misc/NEWS.d/next/Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst b/Misc/NEWS.d/next/Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst new file mode 100644 index 00000000000..c81683abf59 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst @@ -0,0 +1,3 @@ +Providing an explicit error message when casting the port property to anything +that is not an integer value using ``urlparse()`` and ``urlsplit()``. +Patch by Matt Eaton.