diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -539,7 +539,12 @@ def word(context, mapping, args): raise error.ParseError(_("word expects two or three arguments, got %d") % len(args)) - num = int(stringify(args[0][0](context, mapping, args[0][1]))) + try: + num = int(stringify(args[0][0](context, mapping, args[0][1]))) + except ValueError: + # i18n: "word" is a keyword + raise error.ParseError( + _("Use strings like '3' for numbers passed to word function")) text = stringify(args[1][0](context, mapping, args[1][1])) if len(args) == 3: splitter = stringify(args[2][0](context, mapping, args[2][1])) diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -2620,3 +2620,9 @@ Test word error messages for not enough $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}" hg: parse error: word expects two or three arguments, got 7 [255] + +Test word for invalid numbers + + $ hg log -Gv -R a --template "{word(2, desc)}" + hg: parse error: Use strings like '3' for numbers passed to word function + [255]