[Python-checkins] bpo-33034: Improve exception message when cast fails for {Parse, Split}Result.port (GH-6078)

Berker Peksag webhook-mailer at python.org
Tue Mar 20 02:41:39 EDT 2018


https://github.com/python/cpython/commit/2cb4661707818cfd92556e7fdf9068a993577002
commit: 2cb4661707818cfd92556e7fdf9068a993577002
branch: master
author: Matt Eaton <agnosticdev at gmail.com>
committer: Berker Peksag <berker.peksag at gmail.com>
date: 2018-03-20T09:41:37+03:00
summary:

bpo-33034: Improve exception message when cast fails for {Parse,Split}Result.port (GH-6078)

files:
A Misc/NEWS.d/next/Library/2018-03-11-08-44-12.bpo-33034.bpb23d.rst
M Lib/test/test_urlparse.py
M Lib/urllib/parse.py

diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index ddee1c38d8b4..9d5121792833 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 58460f9234fb..3f8cfe5300c0 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 000000000000..c81683abf592
--- /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.



More information about the Python-checkins mailing list