Add a warning for code like:

assert (0, 'message')

An empty tuple does not create a warning.  While questionable usage:
  assert (), 'message'

should not display a warning.  Tested manually.
The warning message could be improved.  Feel free to update it.
This commit is contained in:
Neal Norwitz 2008-03-15 22:03:18 +00:00
parent cd6bfab410
commit 400aedacc0
2 changed files with 10 additions and 0 deletions

View File

@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 2?
Core and builtins
-----------------
- Add a warning when asserting a non-empty tuple which is always true.
- Issue #2179: speed up with statement execution by storing the exit method
on the stack instead of in a temporary variable (patch by Jeffrey Yaskin)

View File

@ -2056,6 +2056,14 @@ compiler_assert(struct compiler *c, stmt_ty s)
if (assertion_error == NULL)
return 0;
}
if (s->v.Assert.test->kind == Tuple_kind &&
asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) {
const char* msg =
"assertion is always true, perhaps remove parentheses?";
if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, c->c_filename,
c->u->u_lineno, NULL, NULL) == -1)
return 0;
}
VISIT(c, expr, s->v.Assert.test);
end = compiler_new_block(c);
if (end == NULL)