New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Erroneous suggestion in print statement #76866
Comments
The suggestion given when a for and print with the syntax for python 2.x are used together seems erroneous. Steps to reproduce: for p in some_list: print p The error produced is: SyntaxError: Missing parentheses in call to 'print'. Did you mean print(in some_list: print p)? I am also attaching a small file, that produces the error when run with: python3 printBug.py |
Thank you for the report. The change to the exception message was added in bpo-30597, but it looks like it may be too greedy. Adding the developer to the nosy list. |
Thanks for the report Mayank! As we discussed offline, it is indeed reproducible if someone uses I will look into this issue. |
Re-reading the code for _set_legacy_print_statement_msg, I noticed that we're not currently taking the "start" parameter into account, and that's the offset the compiler passes in to tell us where on the line it found the text "print ". Oops :) We're also currently going to mishandle code like "x = 1; print x; pass" as well: the suggestion for that is "print(x)", but we would currently suggest "print(print x; pass)". Fixing the left offset shouldn't be too difficult, as I believe the correct value for that is just "PRINT_OFFSET + start". For the right offset, I think we'll want to drop the initial XStrip call added for bpo-32028 entirely, and instead calculate the right offset as a PyUnicode_FindChar search for ";" (replacing it with the length of the input string if the separator isn't found). Any trailing whitespace (either before the ";", if one is present, or before the end of the line otherwise) will then be stripped by the remaining XStrip call (the one after the PyUnicode_Substring call). (Even with those improvements, there will still be cases where the heuristic gives an incorrect suggestion due to a syntax error within the expression to be displayed, like "print value:", but there isn't anything simple we can do about those short of trying to compile the calculated suggestion, and I'm not prepared to go that far yet) |
Are ';' and whitespace the only allowed characters following the print expression? |
They're the only characters we won't want to include as part of the suggestion, since they indicate the end of the statement. |
Thanks for the patches, Sanyam & Nitish, and for the original bug report Mayank. Thanks also to Cheryl for nudging us to get it resolved :) |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: