
On Fri, Jul 24, 2015 at 11:40:49AM +1200, Greg Ewing wrote:
Steven D'Aprano wrote:
I don't think I want this behaviour:
f'{spam}' '{eggs}' => format(spam) + '{eggs}'
What do you think should happen in this case:
'{spam}' f'{eggs}'
As I stated before, I think that should at least raise a warning, if not a syntax error. I think we're in uncharted territory here, because f strings aren't really a literal string, they're actually a runtime function call, and we haven't got much in the way of prior-art for implicit concatenation of a literal with a function call. So we ought to be cautious when dealing with anything the least bit ambiguous, and avoid baking in a mistake that we can't easily change. There's no ambiguity with concat'ing f strings only, or non-f strings only, but the more we discuss this, the more inclined I am to say that implicit concatenation between f strings and non-f strings *in any order* should be a syntax error.
It would seem very strange to me if the f infected strings *before* it as well as after it.
It's consistent with Python 2: py> "abc" u"ßŮƕΩж" "def" u'abc\xdf\u016e\u0195\u03a9\u0436def' The unicodeness of the middle term turns the entire concatenation into unicode. I think it is informative that Python 3 no longer allows this behaviour: py> b"abc" u"ßŮƕΩж" b"def" File "<stdin>", line 1 SyntaxError: cannot mix bytes and nonbytes literals -- Steve