Enable Dark Mode!
By: Swaroop N P

What Are the Top 7 Commonly Used Exceptions in Odoo 16

Odoo 16 Odoo Enterprises Odoo Community

Odoo 16 is a powerful and versatile open-source ERP (Enterprise Resource Planning) system that allows businesses to manage various aspects of their operations seamlessly. One crucial aspect of developing robust Odoo modules is handling exceptions effectively. Exception handling ensures that errors and exceptional scenarios are gracefully managed, allowing for a smooth user experience. In this blog, we will explore seven commonly used exceptions in Odoo 16 and delve into their purpose and implementation.

1. ValidationError: The ValidationError exception is commonly used in Odoo to indicate that a certain condition has not been met. It is typically raised when validating data before it is saved to the database. For example, you can use this exception to enforce specific field constraints, such as ensuring a field is not empty or that a date falls within a certain range. To raise a ValidationError, you can use the raise keyword followed by the ValidationError class. You can pass a message to provide feedback to the user regarding the validation error. Odoo 16 will capture this exception and display the message to the user.

from odoo.exceptions import ValidationError
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        if not self.field:
            raise ValidationError('Field cannot be empty!')


2. UserError: The UserError exception is used to notify users about errors or exceptional situations. It is commonly used when the user's input does not match the expected criteria, or when a certain operation cannot be completed due to specific conditions. UserError is typically raised in response to user actions, and its purpose is to inform the user about the issue and guide them on how to resolve it. Similar to ValidationError, you can raise a UserError by using the raise keyword followed by the UserError class. You can provide a message that will be displayed to the user, offering guidance on how to address the error.

from odoo.exceptions import UserError
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        if self.field < 0:
            raise UserError('Field value cannot be negative!')


3. AccessError: The AccessError exception is raised when a user tries to access or perform an action they do not have the necessary privileges. It is commonly used to restrict access to certain records, views, or operations based on the user's permissions. For example, if a user without administrative privileges attempts to delete a record, an AccessError can be raised to prevent unauthorized deletion. To raise an AccessError, you can use the raise keyword followed by the AccessError class. Additionally, you can provide a message to explain to the user why the access is denied.

from odoo.exceptions import AccessError
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        if not self.env.user.has_group('base.group_erp_manager'):
            raise AccessError('You do not have permission to perform this action!')


4. MissingError: The MissingError exception is used to indicate the absence of a required record or resource. It is typically raised when a particular record, such as a partner or a product, is expected to exist but cannot be found in the system. This exception helps prevent further processing or data inconsistencies when essential records are missing. To raise a MissingError, you can use the raise keyword followed by the MissingError class. You can provide a message explaining the missing record and guide the user on addressing the issue.

from odoo.exceptions import MissingError
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        record = self.env['my.other.module'].search([('name', '=', 'example')])
        if not record:
            raise MissingError('Required record not found!')


5. AccessDenied: The AccessDenied exception is similar to the AccessError exception and is used to restrict access to certain resources or actions. However, AccessDenied is more generic and can be used outside the context of user access permissions. It can be raised when a particular operation or functionality is not available or allowed due to certain conditions. This exception provides a way to communicate that the requested action cannot be performed. To raise an AccessDenied exception, you can use the raise keyword followed by the AccessDenied class. You can include a message to inform the user about the denied access and suggest possible alternatives.

from odoo.exceptions import AccessDenied
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        if condition:
            raise AccessDenied('This action is not available at the moment. Please try again  later.')


6. CacheMiss: The CacheMiss exception is raised when a requested resource or data is not found in the cache. Odoo utilizes caching mechanisms to improve performance by storing frequently accessed data in memory. However, if the requested data is not in the cache, a CacheMiss exception can be raised to indicate that the data must be fetched from the database. To raise a CacheMiss exception, you can use the raise keyword followed by the CacheMiss class. This exception is primarily used internally within Odoo to handle cache-related scenarios.

from odoo.exceptions import CacheMiss
class MyClass(models.Model):
    _name = 'my.module'
    def my_method(self):
        if self.field_deprecated:
            raise CacheMiss('The field you are using is deprecated. Please update your configuration.')

Exception handling is a crucial aspect of developing robust and user-friendly Odoo modules. By understanding and utilizing the various exceptions available in Odoo 16, such as ValidationError, UserError, AccessError, MissingError, AccessDenied, and CacheMiss, developers can effectively manage errors and exceptional scenarios. These exceptions not only help maintain data integrity but also provide clear feedback and guidance to users, ensuring a smooth and intuitive user experience within the Odoo environment.

To read more about raising exceptions in the Odoo 15, refer to our blog Raising Exceptions in the Odoo 15

If you need any assistance in odoo, we are online, please chat with us.


Leave a comment




Cybrosys Technologies Pvt. Ltd.
Neospace, Kinfra Techno Park
Kakkancherry, Calicut
Kerala, India - 673635



Cybrosys Limited
Alpha House,
100 Borough High Street, London,
SE1 1LB, United Kingdom



Cybrosys Technologies Pvt. Ltd.
1st Floor, Thapasya Building,
Infopark, Kakkanad,
Kochi, India - 682030.



Cybrosys Techno Solutions
The Estate, 8th Floor,
Dickenson Road,
Bangalore, India - 560042

Send Us A Message