Skip to content

Commit 1308884

Browse files
tserafimjreback
authored andcommitted
ERR: Fix GH13139: better error message on invalid pd.eval and df.query input
closes pandas-dev#13139 Added test case to check for invalid input(empy string) on pd.eval('') and df.query(''). Used existing helper function(_check_expression) Author: Thiago Serafim <[email protected]> Closes pandas-dev#14473 from tserafim/issue#13139 and squashes the following commits: 77483dd [Thiago Serafim] ERR: correctly raise ValueError on empty input to pd.eval() and df.query() (pandas-dev#13139) 9a5c55f [Thiago Serafim] Fix GH13139: better error message on invalid pd.eval and df.query input
1 parent 8f54e35 commit 1308884

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

doc/source/whatsnew/v0.19.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Bug Fixes
4141

4242

4343
- Bug in string indexing against data with ``object`` ``Index`` may raise ``AttributeError`` (:issue:`14424`)
44-
44+
- Corrrecly raise ``ValueError`` on empty input to ``pd.eval()`` and ``df.query()`` (:issue:`13139`)
4545

4646

4747

pandas/computation/eval.py

+1
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ def eval(expr, parser='pandas', engine=None, truediv=True,
233233
"""
234234
first_expr = True
235235
if isinstance(expr, string_types):
236+
_check_expression(expr)
236237
exprs = [e for e in expr.splitlines() if e != '']
237238
else:
238239
exprs = [expr]

pandas/computation/tests/test_eval.py

+12
Original file line numberDiff line numberDiff line change
@@ -1891,6 +1891,18 @@ def test_bad_resolver_raises():
18911891
yield check_bad_resolver_raises, engine, parser
18921892

18931893

1894+
def check_empty_string_raises(engine, parser):
1895+
# GH 13139
1896+
tm.skip_if_no_ne(engine)
1897+
with tm.assertRaisesRegexp(ValueError, 'expr cannot be an empty string'):
1898+
pd.eval('', engine=engine, parser=parser)
1899+
1900+
1901+
def test_empty_string_raises():
1902+
for engine, parser in ENGINES_PARSERS:
1903+
yield check_empty_string_raises, engine, parser
1904+
1905+
18941906
def check_more_than_one_expression_raises(engine, parser):
18951907
tm.skip_if_no_ne(engine)
18961908
with tm.assertRaisesRegexp(SyntaxError,

pandas/tests/frame/test_query_eval.py

+8
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ def test_query_non_str(self):
147147
with tm.assertRaisesRegexp(ValueError, msg):
148148
df.query(111)
149149

150+
def test_query_empty_string(self):
151+
# GH 13139
152+
df = pd.DataFrame({'A': [1, 2, 3]})
153+
154+
msg = "expr cannot be an empty string"
155+
with tm.assertRaisesRegexp(ValueError, msg):
156+
df.query('')
157+
150158
def test_eval_resolvers_as_list(self):
151159
# GH 14095
152160
df = DataFrame(randn(10, 2), columns=list('ab'))

0 commit comments

Comments
 (0)