msg284249 - (view) |
Author: Jim Fasarakis-Hilliard (Jim Fasarakis-Hilliard) * |
Date: 2016-12-29 11:56 |
In short:
>>> f"\{10}"
yields:
"\\{10"
This is reproducible only when `\` precedes the opening bracket, that is:
>>> f"\ {10}"
results in: "\\ 10"
|
msg284256 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2016-12-29 12:45 |
I'm not sure this counts as an error. The backslash means to treat the next character literally, which this does. And since \{ is not a valid escape sequence, it keeps both characters, exactly like:
>>> '\c'
'\\c'
Furthermore, since unknown escape sequences are deprecated, this usage is going to be an error in the future. You can see this now with -Werror:
$ python.exe -Werror
Python 3.6.0b1+ (3.6:87de1f12c41c+, Sep 16 2016, 07:05:57) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f'\{10}'
DeprecationWarning: invalid escape sequence '\{'
>>> '\c'
DeprecationWarning: invalid escape sequence '\c'
>>>
Since this works as I expect it to now, and since it will become an error in the future, I don't think any change is warranted.
|
msg284257 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2016-12-29 12:48 |
But I admit that dropping the trailing } seems odd. I think this particular usage should be an error: no bare } allowed, similar to:
>>> f'10}'
File "<stdin>", line 1
SyntaxError: f-string: single '}' is not allowed
|
msg284258 - (view) |
Author: Jim Fasarakis-Hilliard (Jim Fasarakis-Hilliard) * |
Date: 2016-12-29 12:57 |
I see, the original "complaint" about this behavior on stack overflow was made due to the discrepancy between the f-string the the format "equivalent": '\{}'.format(10)'.
|
msg284259 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2016-12-29 13:02 |
Do you have a link to the SO question?
|
msg284260 - (view) |
Author: Jim Fasarakis-Hilliard (Jim Fasarakis-Hilliard) * |
Date: 2016-12-29 13:07 |
Yes, should've attached in my previous message. See http://stackoverflow.com/questions/41330097/why-does-the-symbol-remain-when-f-10-is-evaluated-in-python-3-6
|
msg284261 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2016-12-29 13:37 |
The problem is not that the trailing } is dropped, but that the starting { starts an f-string expression.
>>> f'\{2*5}'
'\\{10'
I expected either '\\10' as in '\{}'.format(2*5), or at least '\\{2*5}'.
There is other f-string parsing error:
>>> f'\\N{2*5}'
'\\N{2*5}'
I expected '\\N10'. '\\N' doesn't start a unicode name escape. This is a legitimate expression.
|
msg284262 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2016-12-29 13:40 |
Yes:
>>> f'\{2*5}'
'\\{10'
I agree '\\10' would make sense.
|
msg284266 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2016-12-29 14:42 |
This problem was no doubt introduced after 3.6a1 when I changed the parsing to disallow backslashes inside {}.
|
msg284271 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2016-12-29 15:10 |
Proposed patch fixes parsing backslashes in f-strings.
P.S. Definitely we should find other name for this term. I hate misleading "f-string".
|
msg284558 - (view) |
Author: STINNER Victor (vstinner) * |
Date: 2017-01-03 13:12 |
The PEP 498 should be updated to define the expected behaviour of f'\{5}':
https://www.python.org/dev/peps/pep-0498/#escape-sequences
+ self.assertEqual(f'\{6*7}', '\\42')
+ self.assertEqual(f'\\{6*7}', '\\42')
+ self.assertEqual(fr'\{6*7}', '\\42')
+
+ AMPERSAND = 123
+ self.assertEqual(f'\N{AMPERSAND}', '&')
+ self.assertEqual(f'\\N{AMPERSAND}', '\\N123')
+ self.assertEqual(fr'\N{AMPERSAND}', '\\N123')
+ self.assertEqual(f'\\\N{AMPERSAND}', '\\&')
I'm not sure that I like this behaviour.
f'\\N{AMPERSAND}': reading a local variable looks like a typo or a security vulnerability, rather than a nice feature.
IMHO if you want an anti-slash (\) in the output string, it *must* be written "\\" since we *do* interpret other escape sequences:
* f'\n' returns '\n', the newline character U+000A
* f'\N{Snowman}' returns the nice snowman character U+2603 (☃)
* etc.
What is the issue with having to write "\\{10}" to get "\\10" string? It's less error prone.
|
msg284578 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-01-03 15:31 |
> f'\\N{AMPERSAND}': reading a local variable looks like a typo or a security vulnerability, rather than a nice feature.
This can look as a typo, but how would you write this if this is not a typo? f'\\N{AMPERSAND}' is legitimate syntax, and it would be weird to interpret this expression in any other way than as '\\' + 'N' + format(AMPERSAND).
> What is the issue with having to write "\\{10}" to get "\\10" string? It's less error prone.
There is no issue with f'\\{10}'. There is an issue with f'\{10}'.
|
msg284579 - (view) |
Author: STINNER Victor (vstinner) * |
Date: 2017-01-03 15:33 |
> There is no issue with f'\\{10}'. There is an issue with f'\{10}'.
Hum, I'm not sure that my previous comment is explicit: I suggest to raise a syntax error on f'\{10}' (or emit a warning, and raise an error in 3.7 if you insist ;-)).
|
msg284580 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-01-03 15:59 |
Updated patch adds a warning.
|
msg285949 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-01-21 11:22 |
Ping.
|
msg288511 - (view) |
Author: Jim Fasarakis-Hilliard (Jim Fasarakis-Hilliard) * |
Date: 2017-02-24 09:33 |
Serhiy, since review activity has dropped on b.p.o now that the move to github was made, would you like to make this into a pull request to get it reviewed and merged faster?
|
msg288979 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-03-04 15:15 |
I am not experienced with git and am waiting until new workflow be described in the devguide.
|
msg289645 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2017-03-15 07:19 |
Serhiy: I plan to find time in the next week or so to look at this. Sorry for the delay. Plus, the new workflow isn't helping me out: I need to get up to speed on it.
|
msg289689 - (view) |
Author: Ryan Gonzalez (refi64) * |
Date: 2017-03-15 19:07 |
Serhiy: if you want, you can give me your email and I'll submit a PR for you. If you want to do it yourself, just:
Download hub: https://hub.github.com/
git clone python/cpython cpython-git
cd cpython-git
git fork
curl https://raw.githubusercontent.com/mozilla/moz-git-tools/master/hg-patch-to-git-patch > hg-patch-to-git-patch
curl https://bugs.python.org/file46127/fstring_backslash_2.patch | python2 hg-patch-to-git-patch > fstring.patch
git checkout -b fstring-fix
git apply fstring.patch
git commit -am 'bpo-29104: Commit message here'
git push -u MY_GITHUB_USERNAME fstring-fix
git pull-request
|
msg289690 - (view) |
Author: Jim Fasarakis-Hilliard (Jim Fasarakis-Hilliard) * |
Date: 2017-03-15 19:09 |
A PR has been submitted, Ryan. See https://github.com/python/cpython/pull/490
|
msg289694 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-03-15 20:42 |
Thank you Ryan. I already created a PR, but I think your recipe can be helpful for me in future.
|
msg290733 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-03-28 15:43 |
Ping again.
|
msg293604 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-05-13 08:34 |
Eric?
|
msg293608 - (view) |
Author: Eric V. Smith (eric.smith) * |
Date: 2017-05-13 09:08 |
This is on my list of things to review at PyCon, when I should finally have some free time.
|
msg294458 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-05-25 10:33 |
New changeset 0cd7a3f196cf34d9bb0a52e61327f7fe289d9750 by Serhiy Storchaka in branch 'master':
bpo-29104: Fixed parsing backslashes in f-strings. (#490)
https://github.com/python/cpython/commit/0cd7a3f196cf34d9bb0a52e61327f7fe289d9750
|
msg294469 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) * |
Date: 2017-05-25 11:18 |
New changeset 89a310264000a613b7f6abd5916946aef09ae7d2 by Serhiy Storchaka in branch '3.6':
[3.6] bpo-29104: Fixed parsing backslashes in f-strings. (GH-490) (#1812)
https://github.com/python/cpython/commit/89a310264000a613b7f6abd5916946aef09ae7d2
|
|
Date |
User |
Action |
Args |
2022-04-11 14:58:41 | admin | set | github: 73290 |
2017-05-25 11:19:44 | serhiy.storchaka | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
2017-05-25 11:18:58 | serhiy.storchaka | set | messages:
+ msg294469 |
2017-05-25 10:36:04 | serhiy.storchaka | set | pull_requests:
+ pull_request1898 |
2017-05-25 10:33:57 | serhiy.storchaka | set | messages:
+ msg294458 |
2017-05-17 20:46:59 | Mariatta | set | stage: patch review |
2017-05-13 09:08:40 | eric.smith | set | messages:
+ msg293608 |
2017-05-13 08:34:17 | serhiy.storchaka | set | messages:
+ msg293604 |
2017-03-28 15:43:30 | serhiy.storchaka | set | messages:
+ msg290733 |
2017-03-15 20:42:09 | serhiy.storchaka | set | messages:
+ msg289694 |
2017-03-15 19:09:29 | Jim Fasarakis-Hilliard | set | messages:
+ msg289690 |
2017-03-15 19:07:39 | refi64 | set | nosy:
+ refi64 messages:
+ msg289689
|
2017-03-15 07:19:59 | eric.smith | set | messages:
+ msg289645 |
2017-03-15 07:03:43 | serhiy.storchaka | link | issue29814 superseder |
2017-03-05 22:37:23 | serhiy.storchaka | set | pull_requests:
+ pull_request403 |
2017-03-04 15:15:06 | serhiy.storchaka | set | messages:
+ msg288979 |
2017-02-24 09:33:20 | Jim Fasarakis-Hilliard | set | messages:
+ msg288511 |
2017-01-21 11:22:28 | serhiy.storchaka | set | messages:
+ msg285949 |
2017-01-03 15:59:07 | serhiy.storchaka | set | files:
+ fstring_backslash_2.patch
messages:
+ msg284580 |
2017-01-03 15:33:18 | vstinner | set | messages:
+ msg284579 |
2017-01-03 15:31:40 | serhiy.storchaka | set | messages:
+ msg284578 |
2017-01-03 13:12:57 | vstinner | set | nosy:
+ vstinner messages:
+ msg284558
|
2016-12-29 15:10:20 | serhiy.storchaka | set | files:
+ fstring_backslash.patch keywords:
+ patch messages:
+ msg284271
|
2016-12-29 14:42:55 | eric.smith | set | messages:
+ msg284266 |
2016-12-29 13:40:33 | eric.smith | set | messages:
+ msg284262 |
2016-12-29 13:37:39 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages:
+ msg284261
|
2016-12-29 13:07:25 | Jim Fasarakis-Hilliard | set | messages:
+ msg284260 |
2016-12-29 13:02:53 | eric.smith | set | messages:
+ msg284259 |
2016-12-29 12:57:38 | Jim Fasarakis-Hilliard | set | messages:
+ msg284258 |
2016-12-29 12:48:19 | eric.smith | set | messages:
+ msg284257 |
2016-12-29 12:45:48 | eric.smith | set | assignee: eric.smith messages:
+ msg284256 |
2016-12-29 12:05:18 | SilentGhost | set | nosy:
+ eric.smith type: behavior
|
2016-12-29 11:56:25 | Jim Fasarakis-Hilliard | create | |