diff --git a/src/errors.h b/src/errors.h
index c1dc547..ed55304 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -375,3 +375,5 @@
 	INIT(= N_("E1168: Argument already declared in the script: %s"));
 EXTERN char e_import_as_name_not_supported_here[]
 	INIT(= N_("E1169: 'import * as {name}' not supported here"));
+EXTERN char e_cannot_use_hash_curly_to_start_comment[]
+	INIT(= N_("E1170: 'Cannot use #{ to start a comment"));
diff --git a/src/proto/vim9script.pro b/src/proto/vim9script.pro
index c80618f..a7d821c 100644
--- a/src/proto/vim9script.pro
+++ b/src/proto/vim9script.pro
@@ -2,6 +2,7 @@
 int in_vim9script(void);
 void ex_vim9script(exarg_T *eap);
 int not_in_vim9(exarg_T *eap);
+int vim9_bad_comment(char_u *p);
 int vim9_comment_start(char_u *p);
 void ex_export(exarg_T *eap);
 void free_imports_and_script_vars(int sid);
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 9829d88..1046841 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2159,8 +2159,10 @@
   CheckDefAndScriptSuccess(lines)
  
   # legacy syntax doesn't work
-  CheckDefFailure(["var x = #{key: 8}"], 'E1097:', 3)
-  CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1097:', 3)
+  CheckDefFailure(["var x = #{key: 8}"], 'E1170:', 1)
+  CheckDefFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
+  CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
+  CheckDefFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
 
   CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
   CheckDefFailure(["var x = {a : 8}"], 'E1068:', 1)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 38d0b0a..49ecbea 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2452,7 +2452,7 @@
   assert_equal('1_3_', result)
 
   var s = ''
-  while s == 'x' #{comment}
+  while s == 'x' # {comment}
   endwhile
 enddef
 
diff --git a/src/version.c b/src/version.c
index 74eec46..dfc0f03 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2620,
+/**/
     2619,
 /**/
     2618,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 458b4a1..238ce5d 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1546,7 +1546,7 @@
     isn->isn_arg.funcref.fr_func = ufunc->uf_dfunc_idx;
     cctx->ctx_has_closure = 1;
 
-    // if the referenced function is a closure, it may use items further up in
+    // If the referenced function is a closure, it may use items further up in
     // the nested context, including this one.
     if (ufunc->uf_flags & FC_CLOSURE)
 	cctx->ctx_ufunc->uf_flags |= FC_CLOSURE;
@@ -2401,6 +2401,8 @@
 	if (line != NULL)
 	{
 	    p = skipwhite(line);
+	    if (vim9_bad_comment(p))
+		return NULL;
 	    if (*p != NUL && !vim9_comment_start(p))
 		return p;
 	}
@@ -2465,6 +2467,8 @@
 may_get_next_line(char_u *whitep, char_u **arg, cctx_T *cctx)
 {
     *arg = skipwhite(whitep);
+    if (vim9_bad_comment(*arg))
+	return FAIL;
     if (**arg == NUL || (VIM_ISWHITE(*whitep) && vim9_comment_start(*arg)))
     {
 	char_u *next = next_line_from_context(cctx, TRUE);
@@ -4277,10 +4281,13 @@
 
 	if (!eval_isnamec1(**arg))
 	{
-	    if (ends_excmd(*skipwhite(*arg)))
-		semsg(_(e_empty_expression_str), *arg);
-	    else
-		semsg(_(e_name_expected_str), *arg);
+	    if (!vim9_bad_comment(*arg))
+	    {
+		if (ends_excmd(*skipwhite(*arg)))
+		    semsg(_(e_empty_expression_str), *arg);
+		else
+		    semsg(_(e_name_expected_str), *arg);
+	    }
 	    return FAIL;
 	}
 
@@ -8297,6 +8304,8 @@
 	    semsg(_(e_trailing_arg), line);
 	    goto erret;
 	}
+	else if (line != NULL && vim9_bad_comment(skipwhite(line)))
+	    goto erret;
 	else
 	{
 	    line = next_line_from_context(&cctx, FALSE);
diff --git a/src/vim9script.c b/src/vim9script.c
index 05977b6..309d4bd 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -113,12 +113,29 @@
 }
 
 /*
- * Return TRUE if "p" points at a "#".  Does not check for white space.
+ * Give an error message if "p" points at "#{" and return TRUE.
+ * This avoids that using a legacy style #{} dictionary leads to difficult to
+ * understand errors.
+ */
+    int
+vim9_bad_comment(char_u *p)
+{
+    if (p[0] == '#' && p[1] == '{')
+    {
+	emsg(_(e_cannot_use_hash_curly_to_start_comment));
+	return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Return TRUE if "p" points at a "#" not followed by '{'.
+ * Does not check for white space.
  */
     int
 vim9_comment_start(char_u *p)
 {
-    return p[0] == '#';
+    return p[0] == '#' && p[1] != '{';
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
