diff --git a/NEWS.rst b/NEWS.rst
index 73db0939..5f83fd54 100644
--- a/NEWS.rst
+++ b/NEWS.rst
@@ -1,26 +1,27 @@
 .. default-role:: code
 
-Unreleased
+0.25.0 (released 2022-11-08)
 ==============================
 
-Other Breaking Changes
+Breaking Changes
 ------------------------------
 * `dfor` no longer requires brackets around its final arguments, so
   `(dfor x (range 5) [x (* 2 x)])` is now `(dfor x (range 5) x (* 2
   x))`.
-
-New Features
-------------------------------
-* Python 3.11 is now supported.
-* `except*` (PEP 654) is now recognized in `try`.
+* `except*` (PEP 654) is now recognized in `try`, and a placeholder
+  macro for `except*` has been added.
 
 Bug Fixes
 ------------------------------
-* Fixed `hy.repr` of `slice` objects with non-integer arguments.
 * `__file__` should now be set the same way as in Python.
+* `\N{…}` escape sequences are now recognized in f-strings.
 * Fixed a bug with `python -O` where assertions were still partly
   evaluated.
-* `\N{…}` escape sequences are now recognized in f-strings.
+* Fixed `hy.repr` of `slice` objects with non-integer arguments.
+
+New Features
+------------------------------
+* Python 3.11 is now supported.
 
 Misc. Improvements
 ------------------------------
diff --git a/docs/api.rst b/docs/api.rst
index c19cc5da..942770ad 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -1428,6 +1428,7 @@ expanded, is crash, regardless of their arguments:
 
 - ``else``
 - ``except``
+- ``except*``
 - ``finally``
 - ``unpack-mapping``
 - ``unquote``
diff --git a/hy/core/result_macros.py b/hy/core/result_macros.py
index c3871139..8d5390e4 100644
--- a/hy/core/result_macros.py
+++ b/hy/core/result_macros.py
@@ -1895,7 +1895,8 @@ def compile_let(compiler, expr, root, bindings, body):
 
 
 @pattern_macro(
-    "unquote unquote-splice unpack-mapping except finally else".split(), [many(FORM)]
+    "unquote unquote-splice unpack-mapping except except* finally else".split(),
+    [many(FORM)],
 )
 def compile_placeholder(compiler, expr, root, body):
     raise ValueError(f"`{root}` is not allowed here")

diff --git a/tests/compilers/test_ast.py b/tests/compilers/test_ast.py
index 7083be6b..800c830c 100644
--- a/tests/compilers/test_ast.py
+++ b/tests/compilers/test_ast.py
@@ -579,14 +579,22 @@ def test_setv_builtins():
     )
 
 
-def test_top_level_unquote():
+def placeholder_macro(x, ename=None):
     with pytest.raises(HyLanguageError) as e:
-        can_compile("(unquote)")
-    assert "`unquote` is not allowed here" in e.value.msg
+        can_compile(f"({x})")
+    assert f"`{ename or x}` is not allowed here" in e.value.msg
 
-    with pytest.raises(HyLanguageError) as e:
-        can_compile("(unquote-splice)")
-    assert "`unquote-splice` is not allowed here" in e.value.msg
+
+def test_top_level_unquote():
+    placeholder_macro("unquote")
+    placeholder_macro("unquote-splice")
+    placeholder_macro("unquote_splice", "unquote-splice")
+
+
+def test_bad_exception():
+    placeholder_macro("except")
+    placeholder_macro("except*")
+    placeholder_macro(hy.mangle("except*"), "except*")
 
 
 def test_lots_of_comment_lines():

Make a new release
You fixed the setup.py to support 3.11, please release that.
tests/compilers/test_ast.py::test_bad_exception
tests/compilers/test_ast.py::test_ast_bad_type tests/compilers/test_ast.py::test_empty_expr tests/compilers/test_ast.py::test_dot_unpacking tests/compilers/test_ast.py::test_ast_bad_if tests/compilers/test_ast.py::test_ast_valid_if tests/compilers/test_ast.py::test_ast_valid_unary_op tests/compilers/test_ast.py::test_ast_invalid_unary_op tests/compilers/test_ast.py::test_ast_bad_while tests/compilers/test_ast.py::test_ast_good_do tests/compilers/test_ast.py::test_ast_good_raise tests/compilers/test_ast.py::test_ast_raise_from tests/compilers/test_ast.py::test_ast_bad_raise tests/compilers/test_ast.py::test_ast_good_try tests/compilers/test_ast.py::test_ast_bad_try tests/compilers/test_ast.py::test_ast_good_except tests/compilers/test_ast.py::test_ast_bad_except tests/compilers/test_ast.py::test_ast_good_assert tests/compilers/test_ast.py::test_ast_bad_assert tests/compilers/test_ast.py::test_ast_good_global tests/compilers/test_ast.py::test_ast_bad_global tests/compilers/test_ast.py::test_ast_good_nonlocal tests/compilers/test_ast.py::test_ast_bad_nonlocal tests/compilers/test_ast.py::test_ast_good_defclass tests/compilers/test_ast.py::test_ast_good_defclass_with_metaclass tests/compilers/test_ast.py::test_ast_bad_defclass tests/compilers/test_ast.py::test_ast_good_lambda tests/compilers/test_ast.py::test_ast_bad_lambda tests/compilers/test_ast.py::test_ast_good_yield tests/compilers/test_ast.py::test_ast_bad_yield tests/compilers/test_ast.py::test_ast_import_mangle_dotted tests/compilers/test_ast.py::test_ast_good_import_from tests/compilers/test_ast.py::test_ast_require tests/compilers/test_ast.py::test_ast_import_require_dotted tests/compilers/test_ast.py::test_ast_multi_require tests/compilers/test_ast.py::test_ast_good_get tests/compilers/test_ast.py::test_ast_bad_get tests/compilers/test_ast.py::test_ast_good_cut tests/compilers/test_ast.py::test_ast_bad_cut tests/compilers/test_ast.py::test_ast_bad_with tests/compilers/test_ast.py::test_ast_valid_while tests/compilers/test_ast.py::test_ast_valid_for tests/compilers/test_ast.py::test_nullary_break_continue tests/compilers/test_ast.py::test_ast_expression_basics tests/compilers/test_ast.py::test_ast_anon_fns_basics tests/compilers/test_ast.py::test_ast_lambda_lists tests/compilers/test_ast.py::test_ast_print tests/compilers/test_ast.py::test_ast_tuple tests/compilers/test_ast.py::test_lambda_list_keywords_rest tests/compilers/test_ast.py::test_lambda_list_keywords_kwargs tests/compilers/test_ast.py::test_lambda_list_keywords_kwonly tests/compilers/test_ast.py::test_lambda_list_keywords_mixed tests/compilers/test_ast.py::test_missing_keyword_argument_value tests/compilers/test_ast.py::test_ast_unicode_strings tests/compilers/test_ast.py::test_ast_unicode_vs_bytes tests/compilers/test_ast.py::test_format_string tests/compilers/test_ast.py::test_ast_bracket_string tests/compilers/test_ast.py::test_literal_newlines tests/compilers/test_ast.py::test_compile_error tests/compilers/test_ast.py::test_for_compile_error tests/compilers/test_ast.py::test_attribute_access tests/compilers/test_ast.py::test_attribute_empty tests/compilers/test_ast.py::test_bad_setv tests/compilers/test_ast.py::test_defn tests/compilers/test_ast.py::test_setv_builtins tests/compilers/test_ast.py::test_top_level_unquote tests/compilers/test_ast.py::test_lots_of_comment_lines tests/compilers/test_ast.py::test_compiler_macro_tag_try tests/compilers/test_ast.py::test_ast_good_yield_from tests/compilers/test_ast.py::test_ast_bad_yield_from tests/compilers/test_ast.py::test_eval_generator_with_return tests/compilers/test_ast.py::test_futures_imports tests/compilers/test_ast.py::test_inline_python tests/compilers/test_ast.py::test_models_accessible tests/compilers/test_ast.py::test_module_prelude