diff --git a/django/template/base.py b/django/template/base.py
index 5615478ea58..b0b15e4a385 100644
--- a/django/template/base.py
+++ b/django/template/base.py
@@ -773,7 +773,10 @@ class Variable(object):
                         if isinstance(current, BaseContext) and getattr(type(current), bit):
                             raise AttributeError
                         current = getattr(current, bit)
-                    except (TypeError, AttributeError):
+                    except (TypeError, AttributeError) as e:
+                        # Reraise an AttributeError raised by a @property
+                        if isinstance(e, AttributeError) and not isinstance(current, BaseContext) and bit in dir(current):
+                            raise
                         try:  # list-index lookup
                             current = current[int(bit)]
                         except (IndexError,  # list index out of range
diff --git a/tests/template_tests/tests.py b/tests/template_tests/tests.py
index 0d83f38950e..d5ee85fce23 100644
--- a/tests/template_tests/tests.py
+++ b/tests/template_tests/tests.py
@@ -110,13 +110,17 @@ class SomeClass:
             raise SomeOtherException
         raise KeyError
 
+    @property
     def silent_fail_attribute(self):
         raise SomeException
-    silent_fail_attribute = property(silent_fail_attribute)
 
+    @property
     def noisy_fail_attribute(self):
         raise SomeOtherException
-    noisy_fail_attribute = property(noisy_fail_attribute)
+
+    @property
+    def attribute_error_attribute(self):
+        raise AttributeError
 
 
 class OtherClass:
@@ -820,6 +824,9 @@ class TemplateTests(TestCase):
             'filter-syntax23': (r'1{{ var.noisy_fail_key }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)),
             'filter-syntax24': (r'1{{ var.noisy_fail_attribute }}2', {"var": SomeClass()}, (SomeOtherException, SomeOtherException)),
 
+            # #16383 - A @property that raises AttributeError should not fail loudly.
+            'filter-syntax25': ('{{ var.attribute_error_attribute }}', {"var": SomeClass()}, (AttributeError)),
+
             ### COMMENT SYNTAX ########################################################
             'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
             'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"),