diff --git a/addons/account_tax_python/i18n/account_tax_python.pot b/addons/account_tax_python/i18n/account_tax_python.pot
index 8465e392235b0354b3624788d5812b8ee62f64b0..ea8cb347236f4721b2f298a6974b42ac30cdccb5 100644
--- a/addons/account_tax_python/i18n/account_tax_python.pot
+++ b/addons/account_tax_python/i18n/account_tax_python.pot
@@ -107,3 +107,13 @@ msgstr ""
 #: model:ir.model,name:account_tax_python.model_account_tax_template
 msgid "Templates for Taxes"
 msgstr ""
+
+#. module: account_tax_python
+#: code:addons/account_tax_python/models/account_tax.py:0
+#: code:addons/account_tax_python/models/account_tax.py:0
+#, python-format
+msgid ""
+"You entered invalid code %r in %r taxes\n"
+"\n"
+"Error : %s"
+msgstr ""
diff --git a/addons/account_tax_python/models/account_tax.py b/addons/account_tax_python/models/account_tax.py
index 83f610879e98d583510b40085eee29b062ef0ec4..d629e4b01d689d06c848ed85a2bd0342ecc77722 100644
--- a/addons/account_tax_python/models/account_tax.py
+++ b/addons/account_tax_python/models/account_tax.py
@@ -1,8 +1,9 @@
 # -*- coding: utf-8 -*-
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 
-from odoo import models, fields, api
+from odoo import models, fields, _
 from odoo.tools.safe_eval import safe_eval
+from odoo.exceptions import UserError
 
 
 class AccountTaxPython(models.Model):
@@ -35,7 +36,10 @@ class AccountTaxPython(models.Model):
         if self.amount_type == 'code':
             company = self.env.company
             localdict = {'base_amount': base_amount, 'price_unit':price_unit, 'quantity': quantity, 'product':product, 'partner':partner, 'company': company}
-            safe_eval(self.python_compute, localdict, mode="exec", nocopy=True)
+            try:
+                safe_eval(self.python_compute, localdict, mode="exec", nocopy=True)
+            except Exception as e:
+                raise UserError(_("You entered invalid code %r in %r taxes\n\nError : %s") % (self.python_compute, self.name, e)) from e
             return localdict['result']
         return super(AccountTaxPython, self)._compute_amount(base_amount, price_unit, quantity, product, partner)
 
@@ -47,7 +51,10 @@ class AccountTaxPython(models.Model):
         for tax in self.filtered(lambda r: r.amount_type == 'code'):
             localdict = self._context.get('tax_computation_context', {})
             localdict.update({'price_unit': price_unit, 'quantity': quantity, 'product': product, 'partner': partner, 'company': company})
-            safe_eval(tax.python_applicable, localdict, mode="exec", nocopy=True)
+            try:
+                safe_eval(tax.python_applicable, localdict, mode="exec", nocopy=True)
+            except Exception as e:
+                raise UserError(_("You entered invalid code %r in %r taxes\n\nError : %s") % (tax.python_applicable, tax.name, e)) from e
             if localdict.get('result', False):
                 taxes += tax
         return super(AccountTaxPython, taxes).compute_all(price_unit, currency, quantity, product, partner, is_refund=is_refund, handle_price_include=handle_price_include, include_caba_tags=include_caba_tags)