Issue 26188: Provide more helpful error message when await is called inside non-async method (original) (raw)

Created on 2016-01-24 02:06 by nchammas, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (5)
msg258879 - (view) Author: Nicholas Chammas (nchammas) * Date: 2016-01-24 02:06
Here is the user interaction: ```python $ python3 Python 3.5.1 (default, Dec 7 2015, 21:59:10) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> def oh_hai(): ... await something() File "", line 2 await something() ^ SyntaxError: invalid syntax ``` It would be helpful if Python could tell the user something more specific about _why_ the syntax is invalid. Is that possible? For example, in the case above, an error message along the following lines would be much more helpful: ``` SyntaxError: Cannot call `await` inside non-`async` method. ``` Without a hint like this, it's too easy to miss the obvious and waste time eye-balling the code, like I did. :-)
msg258989 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-01-27 02:28
According to PEP 492, “await” is still allowed to be an ordinary identifier in non-async functions until Python 3.7. Which means you are still allowed to write def oh_hai(): await = "something" The proposed error message would need to be smart enough to distinguish the two cases.
msg259386 - (view) Author: Nicholas Chammas (nchammas) * Date: 2016-02-02 13:45
Related discussions about providing more helpful syntax error messages: * http://bugs.python.org/issue1634034 * http://bugs.python.org/issue400734 * http://bugs.python.org/issue20608 From the discussion on , it looks like providing better messages in the general case of a syntax error is quite difficult. But perhaps in limited cases like this one we can do better. Parsers are a bit over my head. Martin, is it difficult to distinguish between `await` as a regular name and `await` as a special token?
msg259434 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-02-02 21:24
I’m not that familiar with the parser either. Maybe I remember a flag or something saying “we are inside an async def function”, which changes “await” from a user identifier into a reserved keyword. But I can’t imagine how that flag will help much with this proposal. The problem I think is “await” is never treated as a reserved keyword when the flag is not set.
msg308813 - (view) Author: Andrew Svetlov (asvetlov) * (Python committer) Date: 2017-12-20 21:01
Nothing to do. Python parser always report with such text on syntax error, there is nothing special for async/await
History
Date User Action Args
2022-04-11 14:58:26 admin set github: 70376
2017-12-20 21:01:36 asvetlov set status: open -> closednosy: + asvetlovmessages: + resolution: wont fixstage: resolved
2016-02-02 21:24:55 martin.panter set messages: +
2016-02-02 13:45:14 nchammas set messages: +
2016-01-27 02:28:31 martin.panter set nosy: + martin.pantermessages: +
2016-01-24 10:06:39 aditya gupta set nosy: + aditya gupta
2016-01-24 09:53:35 SilentGhost set nosy: + gvanrossum, pitrou, vstinner, giampaolo.rodola, yselivanovcomponents: + asyncio
2016-01-24 02:06:03 nchammas create