Is using RuntimeError for general Python errors okay?

Is it acceptable to use the RuntimeError exception for general application use in Python?

For example, would it be fine to raise an exception like:

raise RuntimeError('config file is missing host address')

I have a few one-off situations in my code where I want to raise a fatal error and provide a clear message to the console, but I’d prefer not to create a custom exception class for each of these cases. Is using RuntimeError in such cases appropriate, or is there a better practice?

From my experience, using RuntimeError is a reasonable fallback when your program encounters unexpected situations that prevent it from continuing. However, it’s always better to use more specific exceptions when possible. For instance, FileNotFoundError or ValueError can be more appropriate for particular issues like missing files or invalid values. That said, if none of the built-in exceptions seem right, RuntimeError works as a generic choice.

raise RuntimeError('config file is missing host address')

It’s simple, but as your codebase grows, you might find it helpful to add more specificity.

Building on Netra’s point, while RuntimeError works for generic issues, creating custom exceptions can significantly improve code readability and debugging. In larger or more complex projects, custom exceptions make it clear exactly what went wrong, which is a huge help during maintenance.

For example:

class MissingHostAddressError(RuntimeError):
    pass

raise MissingHostAddressError('Config file is missing host address')

This adds clarity and helps distinguish different error scenarios. Plus, when you’re debugging, custom exception names often make logs and stack traces easier to interpret.

I completely agree with Mark and Netra, but let me take it a step further. If the error is specific to a well-known category, Python’s built-in exceptions might be your best bet. They’re designed for common situations and make your intent crystal clear to anyone reading your code. For example, if the problem is with a missing configuration file, FileNotFoundError is a better choice:

raise FileNotFoundError('config file is missing host address')

This approach aligns with Python’s philosophy of simplicity and explicitness. Using specific built-in exceptions also integrates better with existing Python error-handling mechanisms.