diff --git a/pyopencl/array.py b/pyopencl/array.py
index 531f232135aff3e529888b3fd17bfb75a6c64720..cd0b7fabc80dca694c6f9204aec4519db8e218fe 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -798,9 +798,16 @@ class Array:
         return result
 
     def __str__(self):
+        if self.queue is None:
+            return (f"<cl.Array without queue, call with_queue() to print>")
+
         return str(self.get())
 
     def __repr__(self):
+        if self.queue is None:
+            return (f"<cl.Array at {id(self):x} without queue, "
+                    "call with_queue() to print>")
+
         result = repr(self.get())
         if result[:5] == "array":
             result = "cl.Array" + result[5:]
diff --git a/test/test_array.py b/test/test_array.py
index b5e99273cf2d1313cd3c1506fa6d8a5912253a17..162f52847e21a994152a409b4e1925ee2bb008a5 100644
--- a/test/test_array.py
+++ b/test/test_array.py
@@ -1477,6 +1477,15 @@ def test_zero_size_array(ctx_factory, empty_shape):
     cl_array.to_device(queue, c_host)
 
 
+def test_str_without_queue(ctx_factory):
+    context = ctx_factory()
+    queue = cl.CommandQueue(context)
+
+    a = cl_array.zeros(queue, 10, dtype=np.float32).with_queue(None)
+    print(str(a))
+    print(repr(a))
+
+
 if __name__ == "__main__":
     if len(sys.argv) > 1:
         exec(sys.argv[1])