A good programming language should, among other things, aim to replace run-time errors by compile-time errors. Language features such as strong typing help.
A good program should attempt to avoid run-time errors by, for example, checking that their input data is sensible. Where this is not possible, the program should attempt to detect the error and handle it gracefully rather than just exiting via the language or operating system's default handler. Here again, a good language will make this easy to do (or at least possible).