You can compile Python code. The interpreter is capable of either interpreting your code as you wrote it or as Python byte code (that's what the .pyc files you'll sometimes see are. Sometimes the interpreter will just compile the file when you tell it to run, then it'll run that compiled file).
As for mistakes being caught, you should be using PyUnit and writing unit tests to catch stuff, and running those unit tests before commiting code to the repository. At the very least, you should be running diff before committing and seeing the mistake and removing it before committing (so many times I almost forget to remove debug messages...)
You can, but you're not required to and a unit test will never catch all cases, at least for larger projects. Still I get the cleanliness and convenience of the syntax, but it's less strict, so I would hesitate to call it far superior, that's all. I personally prefer the end statements in Ruby for that reason.