Strings are perfectly safe on a Nano, because on the AVR boards they always keep 128bytes of stack free for the program to run. So can easily debug with print()s
For a variety of solutions to read from Serial, that don’t use c-strings, see my Arduino Software Solutions
For the python side, this code might give you some ideas
And there is also this post Demo of PC-Arduino comms using Python
While that is very good advice, I have a SerialComs class that is very tolerant of delays in the loop and of course it is difficult to avoid delays on the python side if you ask for user input.
I have split this from Data in serial comm going more than expected as it wasn’t really in answer the the OP’s original question, but worth discussing separately.