On 15/08/2019 12:17:36, Petr Viktorin wrote:
On 8/15/19 10:40 AM, Greg Ewing wrote:
If we want a truly raw string format that allows all characters,
including any kind of quote, we could take a tip from Fortran:

     s = 31HThis is a "totally raw" string!

Or from Rust:

let s = r"Here's a raw string";
let s = r#"Here's a raw string with "quotes" in it"#;
let s = r##"Here's r#"the raw string syntax"# in raw string"##;
let s = r###"and here's a '##"' as well"###;
_______________________________________________
I rather like the idea!  (Even though it would add to the proliferation of string types.) Obviously Python can't use # as the special character since that introduces a comment, and a lot of other possibilities are excluded because they would lead to ambiguous syntax. Say for the sake of argument we used "!" (exclamation mark). Possible variations include:
(1) Like Rust:
    s = r"Here's a raw string";
    s = r!"Here's a raw string with "quotes" in it"!;
    s = r!!"Here's r!"the raw string syntax"! in raw string"!!;
    s = r!!!"and here's a '!!"' as well"!!!;
(2) Same, but omit the leading 'r' when using !:
    s = r"Here's a raw string";
    s = !"Here's a raw string with "quotes" in it"!;
    s = !!"Here's a raw string with "quotes" and !exclamation marks! in it"!!;
    s = !!!"and here's a '!!"' as well"!!!;
    # Cons: Would conflict with adding ! as an operator (or at minimum, as a unary operator) for some other purpose in future.
    #            Makes it less obvious that a !string! is a raw string.
(3) Allow the user to specify his own delimiting character:
    s = r!|This raw string can't contain a "bar".|
(4) As above, but the "!" is not required:
    s = r|This raw string can't contain a "bar".|
    # In this case the delimiter ought not to be a letter
    # (it might conflict with current or future string prefixes);
    # this could be forbidden.
(5) Similar, but allow the user to specify his own delimiting *string* (specified between "!"s) (as long as it doesn't contain !):
    let s = r!?@!Could this string could contain almost anything? Yes!?@
    # The text in this string is:
    #                    Could this string could contain almost anything?  Yes! (6) Same except the first "!" is not required.  In this case the first character of the delimiting string should not be a letter:
    let s = r?@!Could this string could contain almost anything? Yes!?@
    # The text in this string is:
    #                   Could this string could contain almost anything?  Yes!

I can dream ...

A point about the current syntax: It is not true that a raw string can't end in a backslash, as https://en.wikipedia.org/wiki/String_literal points out.  It can't end in an *odd number* of backslashes.  42 is fine, 43 is no good.  Which makes it seem even more of a language wart
(think of program-generated art).

Rob Cliffe
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/AZVQBRODB64WAP22J4VSVOBAIEKLUMB5/

Reply via email to