Error handling is the practice of anticipating things that could go wrong in your program and dealing with them gracefully instead of letting your program crash. Without it, a single unexpected value or failed operation can bring your entire program to a halt.
The most common pattern across languages is the try/catch block. You put the code that might fail inside the try block, and if something goes wrong the program jumps to the catch block where you can decide what to do about it — log a message, use a fallback value, or let the user know something went wrong.
Most languages also have a finally block which runs no matter what — whether the code succeeded or failed. This is useful for cleanup tasks like closing a file or disconnecting from a database that need to happen regardless of the outcome.
Errors themselves are usually objects containing information about what went wrong. Learning to read error messages clearly is one of the most valuable skills you can develop as a programmer — they tell you exactly what failed and where.