Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Better module info for SyntaxWarnings during AST parsing #135801

Open
@cdce8p

Description

@cdce8p

Feature or enhancement

Proposal:

Syntax warnings during AST parsing use _PyCompile_Warn to setup their warning context automatically. Though the filename is correct, the module is inferred and often not helpful. This is especially an issue when trying to ignore specific errors in a CI environment with pytest where the module is suddenly importlib._bootstrap. In other cases with python alone it's often just sys.

AFAICT this applies mainly to the "is" with '...' literal and 'return' in 'finally' block warnings.

--
To reproduce

# test.py
class A:
    def __init__(self):
        self.var = 2

    def func(self) -> bool:
        return self.var is 2
./python.exe -W error::SyntaxWarning:sys test.py
  File "/.../test.py", line 7
    return self.var is 2
           ^^^^^^^^^^^^^
SyntaxError: "is" with 'int' literal. Did you mean "=="?

Note: The SyntaxWarning is changed to an error for module sys where test would have been the expected module.

--
The SyntaxWarning is triggered here:

cpython/Python/codegen.c

Lines 1831 to 1837 in b14986c

const char *msg = (op == Is)
? "\"is\" with '%.200s' literal. Did you mean \"==\"?"
: "\"is not\" with '%.200s' literal. Did you mean \"!=\"?";
expr_ty literal = !left ? left_expr : right_expr;
return _PyCompile_Warn(
c, LOC(e), msg, infer_type(literal)->tp_name
);

cpython/Python/compile.c

Lines 1204 to 1214 in b14986c

_PyCompile_Warn(compiler *c, location loc, const char *format, ...)
{
va_list vargs;
va_start(vargs, format);
PyObject *msg = PyUnicode_FromFormatV(format, vargs);
va_end(vargs);
if (msg == NULL) {
return ERROR;
}
int ret = _PyErr_EmitSyntaxWarning(msg, c->c_filename, loc.lineno, loc.col_offset + 1,
loc.end_lineno, loc.end_col_offset + 1);

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions