diff --git a/django/core/management/commands/shell.py b/django/core/management/commands/shell.py
index fe24f4b3fb..cbd4c86620 100644
--- a/django/core/management/commands/shell.py
+++ b/django/core/management/commands/shell.py
@@ -66,12 +66,20 @@ class Command(BaseCommand):
         # write history to the .python_history file, but this can be overridden by
         # $PYTHONSTARTUP or ~/.pythonrc.py.
         try:
-            sys.__interactivehook__()
-        except Exception:
-            # Match the behavior of the cpython shell where an error in
-            # sys.__interactivehook__ prints a warning and the exception and continues.
-            print("Failed calling sys.__interactivehook__")
-            traceback.print_exc()
+            hook = sys.__interactivehook__
+        except AttributeError:
+            # Match the behavior of the cpython shell where a missing
+            # sys.__interactivehook__ is ignored.
+            pass
+        else:
+            try:
+                hook()
+            except Exception:
+                # Match the behavior of the cpython shell where an error in
+                # sys.__interactivehook__ prints a warning and the exception
+                # and continues.
+                print('Failed calling sys.__interactivehook__')
+                traceback.print_exc()
 
         # Set up tab completion for objects imported by $PYTHONSTARTUP or
         # ~/.pythonrc.py.