Python Forum

Full Version: SyntaxError: unexpected character after line continuation character
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello all, and I'm a new member here Big Grin .
I made a esoteric version of Python for fun, but I'm having some problems when running multiline code with the \n and \t characters. Here is the program that runs the code:
#QwertyPy
def decode(string):
    re = ""
    slist = string.split("_")
    for i in range(0,len(slist)):
        if slist[i][0] in "0123456789":
            if int(slist[i]) > 92:
                re = re + " "
            else:
                re = re + char[int(slist[i])]
        elif slist[i] not in char:
            re = re + slist[i]
    return re
char = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789~!@#$%^&*()_+-=[]{}\|;:,./<>? "
code = raw_input()
c = (decode(code))
exec(c)
Basically, it is Python but every character is mapped to the string "char" as seen above. Not sure how to explain this though. For example, a simple "Hello World!" program looks like this:
9_3_7_24_4_71_"_41_2_18_18_8_94_27_8_3_18_12_63_"_72
It separates the string by the "_" character, and gets the nth char in the char string. For example, the number "9" corresponds to the letter "p" in the char string, the number 3 to "r", and so on, and characters that aren't numbers are unchanged.

But I have trouble when entering this, which is an infinite counter:
7_103_76_123_52_81_24_1_15_7_18_2_147_30_3_6_2_84_81_24_81_4_9_3_7_24_4_71_7_72_81_24_81_4_7_138_74_76_113_53
Which corresponds to the normal Python:
i = 0
while True:
   print(i)
   i += 1
But for some reason it gives the following error:
Error:
Traceback (most recent call last): File "C:\Users\sakaf\Documents\Saka\scripts\Not Golly\qwertypy.py", line 17, in <module> exec(c) File "<string>", line 1 i = 0\nwhile True:\n\tprint(i)\n\ti += 1 ^ SyntaxError: unexpected character after line continuation character
Strangely enough, when I paste i = 0\nwhile True:\n\tprint(i)\n\ti += 1 and run it using exec() in the python shell, it runs fine. So why is this happening?

Thanks Big Grin
That's some fun script.

To understand the problem you should print variable c.You'll see that i = 0\nwhile True:\n\tprint(i)\n\ti += 1 is printed which implies that the backslash has already been escaped. So your real string actually is i = 0\\nwhile True:\\n\\tprint(i)\\n\\ti += 1.

To solve the problem convert string to bytes and decode with unicode-escape

c = (decode(code))
c = c.encode('ascii').decode('unicode-escape')
exec(c)
More on problem:
>>> a = 'hello \nThis is newline \n\tThis is horizontal tab'
>>> print(a)
hello
This is newline
        This is horizontal tab
>>> a = 'hello \\nThis is not a newline \\n\\tThis is not a horizontal tab'
>>> print(a)
hello \nThis is not a newline \n\tThis is not a horizontal tab
(Sep-25-2017, 02:28 PM)hbknjr Wrote: [ -> ]...
To solve the problem convert string to bytes and decode with unicode-escape
...
Thank you so much! Now it works great and I can run pretty much any piece of python code in this obscure language. Thanks!