{"record":{"id":"81f0249c9b836a92","repo":"go-delve/delve","slug":"argument-of-dlv-command-is-not-a-string","errorCode":null,"errorMessage":"argument of dlv_command is not a string","messagePattern":"argument of dlv_command is not a string","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/terminal/starbind/starlark.go","lineNumber":93,"sourceCode":"\t// Make the \"time\" module available to Starlark scripts.\n\tstarlark.Universe[\"time\"] = startime.Module\n\n\tvar doc map[string]string\n\tenv.env, doc = env.starlarkPredeclare()\n\n\tbuiltindoc := func(name, args, descr string) {\n\t\tdoc[name] = name + args + \"\\n\\n\" + name + \" \" + descr\n\t}\n\n\tenv.env[dlvCommandBuiltinName] = starlark.NewBuiltin(dlvCommandBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\targstrs := make([]string, len(args))\n\t\tfor i := range args {\n\t\t\ta, ok := args[i].(starlark.String)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"argument of dlv_command is not a string\")\n\t\t\t}\n\t\t\targstrs[i] = string(a)\n\t\t}\n\t\terr := env.ctx.CallCommand(strings.Join(argstrs, \" \"))\n\t\tif err != nil && strings.Contains(err.Error(), \" has exited with status \") {\n\t\t\treturn env.interfaceToStarlarkValue(err), nil\n\t\t}\n\t\treturn starlark.None, decorateError(thread, err)\n\t})\n\tbuiltindoc(dlvCommandBuiltinName, \"(Command)\", \"interrupts, continues and steps through the program.\")\n\n\tenv.env[readFileBuiltinName] = starlark.NewBuiltin(readFileBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif len(args) != 1 {\n\t\t\treturn nil, decorateError(thread, errors.New(\"wrong number of arguments\"))\n\t\t}\n\t\tpath, ok := args[0].(starlark.String)\n\t\tif !ok {\n\t\t\treturn nil, decorateError(thread, errors.New(\"argument of read_file was not a string\"))","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/go-delve/delve/blob/a23773e6c31361e43246bc43a424ee009679b174/pkg/terminal/starbind/starlark.go#L75-L111","documentation":"The dlv_command Starlark builtin executes a Delve CLI command. It requires every argument to be a starlark.String; if any positional argument is another Starlark type (int, list, None, etc.) it returns this error rather than coercing, so command text is always built from real strings.","triggerScenarios":"Calling `dlv_command(123)`, `dlv_command([\"break\", \"main.go:1\"])`, or passing a non-string variable produced by a script (e.g. an int line number) directly to dlv_command.","commonSituations":"Scripts assembling commands with numeric line numbers or values returned from other dlv builtins; forgetting str() conversion; passing a list expecting the builtin to splat it.","solutions":["Convert arguments with str() before calling: `dlv_command(\"break main.go:\" + str(line))`.","Pass a single pre-joined string: `dlv_command(\" \".join(args))` after mapping every element to str.","Inspect argument types in the script (type(x) == \"string\") before invoking dlv_command."],"exampleFix":"// before\nline = 42\ndlv_command(\"break main.go:\", line)  # error\n// after\nline = 42\ndlv_command(\"break main.go:\" + str(line))","handlingStrategy":"type-guard","validationCode":"def is_string(v):\n    return type(v) == \"string\"","typeGuard":"def is_string(v):\n    return type(v) == \"string\"","tryCatchPattern":"try:\n    dlv_command(arg)\nexcept Exception as e:\n    if \"not a string\" in str(e):\n        dlv_command(str(arg))\n    else:\n        raise","preventionTips":["Always str()-convert non-string values before dlv_command","Join argument lists yourself with \" \".join(map(str, args))","Never pass lists, ints, or None directly to dlv_command"],"tags":["starlark","scripting","type-error"],"backgroundTag":"argument-type-mismatch","analyzedSha":"a23773e6c31361e43246bc43a424ee009679b174","analyzedAt":"2026-08-31T15:12:45.221Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}