bpo-33262: Deprecate passing None for `s` to shlex.split() (GH-6514)

* bpo-33262: Deprecate passing None for `s` to shlex.split()

This reads the string to split from standard input.

* Update What's New.

* Fix shlex.rst
This commit is contained in:
Zackery Spytz 2020-04-01 07:58:55 -06:00 committed by GitHub
parent 7c72383f95
commit 975ac326ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 1 deletions

View File

@ -36,6 +36,9 @@ The :mod:`shlex` module defines the following functions:
instance, passing ``None`` for *s* will read the string to split from instance, passing ``None`` for *s* will read the string to split from
standard input. standard input.
.. deprecated:: 3.9
Passing ``None`` for *s* will raise an exception in future Python
versions.
.. function:: join(split_command) .. function:: join(split_command)

View File

@ -624,6 +624,9 @@ Deprecated
by :c:func:`Py_Initialize()` since Python 3.7. by :c:func:`Py_Initialize()` since Python 3.7.
(Contributed by Victor Stinner in :issue:`39877`.) (Contributed by Victor Stinner in :issue:`39877`.)
* Passing ``None`` as the first argument to the :func:`shlex.split` function
has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.)
Removed Removed
======= =======

View File

@ -304,6 +304,10 @@ class shlex:
def split(s, comments=False, posix=True): def split(s, comments=False, posix=True):
"""Split the string *s* using shell-like syntax.""" """Split the string *s* using shell-like syntax."""
if s is None:
import warnings
warnings.warn("Passing None for 's' to shlex.split() is deprecated.",
DeprecationWarning, stacklevel=2)
lex = shlex(s, posix=posix) lex = shlex(s, posix=posix)
lex.whitespace_split = True lex.whitespace_split = True
if not comments: if not comments:

View File

@ -3,7 +3,7 @@ import itertools
import shlex import shlex
import string import string
import unittest import unittest
from unittest import mock
# The original test data set was from shellwords, by Hartmut Goebel. # The original test data set was from shellwords, by Hartmut Goebel.
@ -162,6 +162,11 @@ class ShlexTest(unittest.TestCase):
tok = lex.get_token() tok = lex.get_token()
return ret return ret
@mock.patch('sys.stdin', io.StringIO())
def testSplitNoneDeprecation(self):
with self.assertWarns(DeprecationWarning):
shlex.split(None)
def testSplitPosix(self): def testSplitPosix(self):
"""Test data splitting with posix parser""" """Test data splitting with posix parser"""
self.splitTest(self.posix_data, comments=True) self.splitTest(self.posix_data, comments=True)

View File

@ -0,0 +1,2 @@
Deprecate passing None as an argument for :func:`shlex.split()`'s ``s``
parameter. Patch by Zackery Spytz.