Python Forum
[solved] unexpected character after line continuation character - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: [solved] unexpected character after line continuation character (/thread-34046.html)



[solved] unexpected character after line continuation character - paul18fr - Jun-21-2021

Hi

To higlight reading by adding comments, I'm looking for a way to split function arguments into several lines; nevertheless using backslash I'm facing to an error (I'm still digging on internet in how to fix it): is there a workaround?

Thanks

Paul

mymodule.myfunction(path, file, arg1, arg2)

mymodule.myfunction(path,   \# comment1
                    file,     \# comment2
                    arg1,   \# comment3
                    arg2)
Error:
SyntaxError: unexpected character after line continuation character



RE: unexpected character after line continuation character - Axel_Erfurt - Jun-21-2021

remove the comments


RE: unexpected character after line continuation character - ibreeden - Jun-21-2021

Hi @paul18fr ,
The backslash ( \ ) takes away the special meaning of the following character. It "escapes" the following character. (Or in some cases, it adds a special meaning to the following character (like "\r") but that is not the case here.)
Usually you can continue a line by putting a backslash before the newline. This takes away the special meaning of the newline: "execute the line".
But this is not needed here because a parenthesis is opened and Python understands it must continue until the closing parenthesis is seen.

So in this case you can just omit the backslashes. (In your example you placed the backslash before the hash sign (#), taking away the special meaning of the hash: "start comment".)


RE: unexpected character after line continuation character - paul18fr - Jun-21-2021

Thanks ibreeden for your help; at least a relevant advise


RE: [solved] unexpected character after line continuation character - deanhystad - Jun-22-2021

I agree with the "remove the comments" suggestion. If you need a comment to describe each argument I see this as a naming problem more than a comment problem. You should have a nice docstring describing the purpose of a module. A nice docstring describing how to use a function. For a class you should document each visible attribute. After that, I don't think good code should have many comments. Code should be obvious. If you find yourself having to comment the code to make the meaning clear, take some time to think about ways to improve the code. Well documented confusing code is still confusing code.

Using named arguments goes a long way towards clearing any confusion about function arguments. This is a function I wrote for a Connect 4 game.
def drop(column:int, player:int)->tuple[int, int]:
    '''Drop player's marker in column.  Marker falls to first open row.
    return resting spot.

    Arguments:
        column : Column chosen to play the marker. 0..COLUMNS-1
        player : Player 0 or 1

    Returns
        row and column where marker is located or None if
        column is full.
    '''
    for row in range(ROWS):
        if BOARD[column][row] is EMPTY:
            BOARD[column][row] = player
            return(column, row)
    return None
From an interactive environment I can ask to see the documentation for this function.
Output:
>>> help(drop) Help on function drop in module __main__: drop(column: int, player: int) -> tuple Drop player's marker in column. Marker falls to first open row. return resting spot. Arguments: column : Column chosen to play the marker. 0..COLUMNS-1 player : Player 0 or 1 Returns row and column where marker is located or None if column is full.
The function is called like this in the code:
    while True:
        try:
            col = int(input(f'{MARKERS[player]}: '))-1
        except ValueError:
            print(f'Enter integer [1:{COLUMNS}]')
        else:
            if spot := drop(column=col, player=player):
                return spot
            print(f'{col} is full')
There is no need to comment the arguments because they are obvious. col is the column argument and player is the player argument. If I want to find out what these arguments do I should look at the documentation for the drop() function, not some possibly incorrect comments where the function is used.