exception error: bad argument in function list_to_integer/1 called as list_to_integer("6379\n") *** argument 1: not a textual representation of an integer in call from redis_config:read_from_file/0 (redis_config.erl, line 15)
时间: 2024-03-23 09:43:33 浏览: 46
c++ std::invalid_argument应用
5星 · 资源好评率100%
这个错误是由于 `list_to_integer/1` 函数的参数不是一个整数的文本表示形式,而是包含换行符的字符串。可以通过使用 `string:strip/1` 函数去掉字符串两端的空格和换行符,然后再将字符串转换为整数来解决这个问题。下面是修改后的代码:
```erlang
-module(redis_config).
-export([write_to_file/2, read_from_file/0]).
% 将 Redis 地址和端口写入文件
write_to_file(Host, Port) ->
{ok, File} = file:open("redis.config", [write, binary]),
ok = file:write(File, io_lib:format("~s ~p", [Host, Port])),
ok = file:close(File).
% 从文件中读取 Redis 地址和端口
read_from_file() ->
{ok, File} = file:open("redis.config", [read, binary]),
{ok, Data} = file:read(File, 1024),
[Host, PortStr] = string:tokens(binary_to_list(Data), " "),
Port = list_to_integer(string:strip(PortStr)),
{ok, {Host, Port}}.
```
在上面的代码中,我们使用 `string:strip/1` 函数去掉了字符串两端的空格和换行符,然后将其转换为整数。这样,就可以避免出现 `bad argument` 错误了。
阅读全文