diff --git a/src/lua/argparse.lua b/src/lua/argparse.lua
index 1471d58460970f50260f2317772ae1545dc57c1b..8dae388b1e82ec7fac9d8cbfabcaa380cf987413 100644
--- a/src/lua/argparse.lua
+++ b/src/lua/argparse.lua
@@ -20,14 +20,21 @@ local function result_set_add(t_out, key, val)
     end
 end
 
+local function err_bad_parameter_value(name, got, expected)
+    if type(got) ~= 'string' then
+        got = 'nothing'
+    else
+        got = string.format('"%s"', got)
+    end
+    error(string.format('Bad value for parameter "%s". Expected %s, got %s',
+                        name, expected, got))
+end
+
 local function convert_parameter_simple(name, convert_from, convert_to)
     if convert_to == 'number' then
         local converted = tonumber(convert_from)
         if converted == nil then
-            error(
-                ('Bad value for parameter %s. expected type %s, got "%s"')
-                :format(name, convert_to, convert_from)
-            )
+            return err_bad_parameter_value(name, convert_from, convert_to)
         end
         return converted
     elseif convert_to == 'boolean' then
@@ -41,20 +48,14 @@ local function convert_parameter_simple(name, convert_from, convert_to)
         if convert_from == '1' or convert_from == 'true' then
             return true
         end
-        error(
-            ('Bad input for parameter "%s". Expected boolean, got "%s"')
-            :format(name, convert_from)
-        )
+        return err_bad_parameter_value(name, convert_from, convert_to)
     elseif convert_to == 'string' then
         if type(convert_from) ~= 'string' then
-            error(
-                ('Bad input for parameter "%s". Expected string, got "%s"')
-                :format(name, convert_from)
-            )
+            return err_bad_parameter_value(name, convert_from, convert_to)
         end
     else
         error(
-            ('Bad convertion format "%s" provided for %s')
+            ('Bad conversion format "%s" provided for %s')
             :format(convert_to, name)
         )
     end
diff --git a/test/app/argparse.result b/test/app/argparse.result
index d57693bc2661b3efe77b12c5114044ae71a4f5ad..04f0439996a34025491345ec1a807ff7e39bab01 100644
--- a/test/app/argparse.result
+++ b/test/app/argparse.result
@@ -137,12 +137,12 @@ argparse({'--verh=42'}, {'verh'})
 ...
 argparse({'--verh=42'}, {{'verh', 'boolean'}})
 ---
-- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected
+- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected
     boolean, got "42"'
 ...
 argparse({'--verh=42'}, {{'verh', 'boolean+'}})
 ---
-- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected
+- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected
     boolean, got "42"'
 ...
 argparse({'--verh=42'}, {'niz'})
diff --git a/test/app/gh-4076-argparse-wrong-bool-handling.result b/test/app/gh-4076-argparse-wrong-bool-handling.result
index 91895b9ed986db9eadd72d7674c16b6730420fec..fd933a37dc7f7f63c9d7678dda78d68e023142bf 100644
--- a/test/app/gh-4076-argparse-wrong-bool-handling.result
+++ b/test/app/gh-4076-argparse-wrong-bool-handling.result
@@ -48,10 +48,36 @@ args = {'--flag1', 'abc'}
  | ...
 argparse(args, params)
  | ---
- | - error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "flag1". Expected
+ | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "flag1". Expected
  |     boolean, got "abc"'
  | ...
 
+--
+-- When parameter value was omitted, it was replaced internally
+-- with boolean true, and sometimes was showed in error messages.
+-- Now it is 'nothing'.
+--
+params = {}
+ | ---
+ | ...
+params[1] = {'value', 'number'}
+ | ---
+ | ...
+argparse({'--value'}, params)
+ | ---
+ | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected
+ |     number, got nothing'
+ | ...
+
+params[1][2] = 'string'
+ | ---
+ | ...
+argparse({'--value'}, params)
+ | ---
+ | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected
+ |     string, got nothing'
+ | ...
+
 test_run:cmd("clear filter")
  | ---
  | - true
diff --git a/test/app/gh-4076-argparse-wrong-bool-handling.test.lua b/test/app/gh-4076-argparse-wrong-bool-handling.test.lua
index abd6c6927a115fdbf86ba0e8201e908abad0ffa6..a8ee5e67037473309a0d334e1a37fb21bd1910f4 100644
--- a/test/app/gh-4076-argparse-wrong-bool-handling.test.lua
+++ b/test/app/gh-4076-argparse-wrong-bool-handling.test.lua
@@ -17,4 +17,16 @@ argparse(args, params)
 args = {'--flag1', 'abc'}
 argparse(args, params)
 
+--
+-- When parameter value was omitted, it was replaced internally
+-- with boolean true, and sometimes was showed in error messages.
+-- Now it is 'nothing'.
+--
+params = {}
+params[1] = {'value', 'number'}
+argparse({'--value'}, params)
+
+params[1][2] = 'string'
+argparse({'--value'}, params)
+
 test_run:cmd("clear filter")