diff --git a/src/errors.h b/src/errors.h
index 8e2b9da..5f2685a 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3010,8 +3010,7 @@
 	INIT(= N_("E1180: Variable arguments type must be a list: %s"));
 EXTERN char e_cannot_use_underscore_here[]
 	INIT(= N_("E1181: Cannot use an underscore here"));
-EXTERN char e_blob_required[]
-	INIT(= N_("E1182: Blob required"));
+// E1182 unused
 EXTERN char e_cannot_use_range_with_assignment_operator_str[]
 	INIT(= N_("E1183: Cannot use a range with an assignment operator: %s"));
 #endif
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 835bc1e..c5f56c2 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -610,6 +610,12 @@
     bl[1] = 8
   END
   v9.CheckDefExecAndScriptFailure(lines, ['E1184:', 'E979:'], 2)
+
+  lines =<< trim END
+    g:bl = 'not a blob'
+    g:bl[1 : 2] = 8
+  END
+  v9.CheckDefExecAndScriptFailure(lines, ['E897:', 'E689:'], 2)
 enddef
 
 def Test_init_in_for_loop()
@@ -1231,6 +1237,7 @@
         assert_equal(0z, bl)
         assert_equal({}, d)
       enddef
+      Echo()
   END
   v9.CheckScriptSuccess(lines)
 enddef
@@ -2070,9 +2077,10 @@
     ], 'E1081:', 2)
 
   # dict unlet
-  var dd = {a: 1, b: 2, c: 3}
+  var dd = {a: 1, b: 2, c: 3, 4: 4}
   unlet dd['a']
   unlet dd.c
+  unlet dd[4]
   assert_equal({b: 2}, dd)
 
   # list unlet
@@ -2181,6 +2189,11 @@
     'unlet dd[g:alist]',
     ], 'E1105:', 2)
 
+  v9.CheckDefExecFailure([
+    'g:dd = {"a": 1, 2: 2}'
+    'unlet g:dd[0z11]',
+    ], 'E1029:', 2)
+
   # can compile unlet before variable exists
   g:someDict = {key: 'val'}
   var k = 'key'
diff --git a/src/version.c b/src/version.c
index 76d7895..edac690 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4408,
+/**/
     4407,
 /**/
     4406,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 318fec9..1c5dd74 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1876,7 +1876,7 @@
 }
 
 /*
- * Store a value in a blob range.
+ * Store a value in a list or blob range.
  */
     static int
 execute_storerange(isn_T *iptr, ectx_T *ectx)
@@ -1893,13 +1893,13 @@
     // -2 second index or "none"
     // -1 destination list or blob
     tv = STACK_TV_BOT(-4);
+    SOURCING_LNUM = iptr->isn_lnum;
     if (tv_dest->v_type == VAR_LIST)
     {
 	long	n1;
 	long	n2;
 	int	error = FALSE;
 
-	SOURCING_LNUM = iptr->isn_lnum;
 	n1 = (long)tv_get_number_chk(tv_idx1, &error);
 	if (error)
 	    status = FAIL;
@@ -1973,7 +1973,7 @@
     else
     {
 	status = FAIL;
-	emsg(_(e_blob_required));
+	emsg(_(e_list_or_blob_required));
     }
 
     clear_tv(tv_idx1);
@@ -2001,7 +2001,7 @@
     if (tv_dest->v_type == VAR_DICT)
     {
 	// unlet a dict item, index must be a string
-	if (tv_idx->v_type != VAR_STRING)
+	if (tv_idx->v_type != VAR_STRING && tv_idx->v_type != VAR_NUMBER)
 	{
 	    SOURCING_LNUM = iptr->isn_lnum;
 	    semsg(_(e_expected_str_but_got_str),
@@ -2012,7 +2012,7 @@
 	else
 	{
 	    dict_T	*d = tv_dest->vval.v_dict;
-	    char_u	*key = tv_idx->vval.v_string;
+	    char_u	*key;
 	    dictitem_T  *di = NULL;
 
 	    if (d != NULL && value_check_lock(
@@ -2021,8 +2021,16 @@
 	    else
 	    {
 		SOURCING_LNUM = iptr->isn_lnum;
-		if (key == NULL)
-		    key = (char_u *)"";
+		if (tv_idx->v_type == VAR_STRING)
+		{
+		    key = tv_idx->vval.v_string;
+		    if (key == NULL)
+			key = (char_u *)"";
+		}
+		else
+		{
+		    key = tv_get_string(tv_idx);
+		}
 		if (d != NULL)
 		    di = dict_find(d, key, (int)STRLEN(key));
 		if (di == NULL)
@@ -3173,7 +3181,7 @@
 		}
 		break;
 
-	    // store value in blob range
+	    // store value in list or blob range
 	    case ISN_STORERANGE:
 		if (execute_storerange(iptr, ectx) == FAIL)
 		    goto on_error;
