params["msid"] = self.redis_client.get("%s:msid" % params["username"]) TypeError: string indices must be integers 怎么解决
时间: 2023-11-03 08:50:15 浏览: 42
这个错误通常是由于尝试使用字符串索引来访问一个非字符串类型的对象而引起的。在你的代码中,`self.redis_client.get("%s:msid" % params["username"])` 返回的可能不是一个字符串,而是其他类型的对象。
要解决这个问题,你可以先检查 `self.redis_client.get("%s:msid" % params["username"])` 返回的对象的类型。如果不是字符串,你可以尝试将其转换为字符串,然后再将其赋值给 `params["msid"]`。例如,可以使用 `str()` 函数将其转换为字符串:
```python
params["msid"] = str(self.redis_client.get("%s:msid" % params["username"]))
```
这样就能确保 `params["msid"]` 是一个字符串类型的值,避免了出现 "TypeError: string indices must be integers" 错误。
相关问题
av_bprintf(&bp, "" "v=0\r\n" "o=FFmpeg 4489045141692799359 2 IN IP4 127.0.0.1\r\n" "s=FFmpegPublishSession\r\n" "t=0 0\r\n" "a=group:BUNDLE 0 1\r\n" "a=extmap-allow-mixed\r\n" "a=msid-semantic: WMS\r\n"); if (!av_bprint_is_complete(&bp)) { g_print("Offer %d exceed max %d, %s\n", ret, MAX_SDP_SIZE, bp.str); ret = -1; goto end; }gstreamer用什么替换
在GStreamer中,可以使用`g_string_printf()`函数或者`g_strdup_printf()`函数来替换`av_bprintf()`函数。
例如,可以使用以下代码替换上述代码:
```c
GString *sdp_str = g_string_new(NULL);
g_string_printf(sdp_str, "v=0\r\n"
"o=FFmpeg 4489045141692799359 2 IN IP4 127.0.0.1\r\n"
"s=FFmpegPublishSession\r\n"
"t=0 0\r\n"
"a=group:BUNDLE 0 1\r\n"
"a=extmap-allow-mixed\r\n"
"a=msid-semantic: WMS\r\n");
if (sdp_str->len > MAX_SDP_SIZE) {
g_print("Offer %d exceed max %d, %s\n", ret, MAX_SDP_SIZE, sdp_str->str);
ret = -1;
goto end;
}
```
或者:
```c
char *sdp_str = g_strdup_printf("v=0\r\n"
"o=FFmpeg 4489045141692799359 2 IN IP4 127.0.0.1\r\n"
"s=FFmpegPublishSession\r\n"
"t=0 0\r\n"
"a=group:BUNDLE 0 1\r\n"
"a=extmap-allow-mixed\r\n"
"a=msid-semantic: WMS\r\n");
if (strlen(sdp_str) > MAX_SDP_SIZE) {
g_print("Offer %d exceed max %d, %s\n", ret, MAX_SDP_SIZE, sdp_str);
ret = -1;
g_free(sdp_str);
goto end;
}
```
这两种方法都可以将SDP内容存储在一个GString或者char类型的变量中。需要注意的是,`g_string_new()`函数会动态分配内存,因此需要使用`g_string_free()`函数释放原有的内存;`g_strdup_printf()`函数会动态分配内存,因此需要使用`g_free()`函数释放原有的内存。
T:1010579200(17:06:00)[S:M001DmwAAPf4uGQOpiYP][da:Info] AQAAfwAHD+v3+Lhkz9QoDw--.27038S2:from=service@marketing.atlas-post.com,to=hr@yy.com,channel=local,folder=Bulk[CACCheckCheck],size=33248,delay=0,rcpttype=to,subject=突破瓶颈,重塑业务竞争力:下载 DevOps 入门白皮书引领企业进步,state=sent,msid=1,mid=1tbiAQEQAGS1ZrcwNwBKsd,score=9.26,id=2 T:1010579200(17:06:00)[S:M001DmwAAPf4uGQOpiYP][da:Info] AQAAfwAHD+v3+Lhkz9QoDw--.27038S2:from=postmaster@yy.com,to=mail-dump-slave@yy.com,channel=local,folder=Bulk[CACCheckCheck],size=33287,delay=0,rcpttype=monitor_forward,subject=[Monitor]突破瓶颈,重塑业务竞争力:下载 DevOps 入门白皮书引领企业进步,state=sent,msid=1,mid=1tbiAQISEGS4Cbg6+QASs9,score=9.26,id=3,hdrfrom=service@marketing.atlas-post.com grep -E 'folder=Bulk' |grep -v "from=.*@yy.com"
要过滤掉发件人为 `@yy.com` 并且包含字符串 "folder=Bulk" 的信息,可以使用以下命令:
```shell
echo "T:1010579200(17:06:00)[S:M001DmwAAPf4uGQOpiYP][da:Info] AQAAfwAHD+v3+Lhkz9QoDw--.27038S2:from=service@marketing.atlas-post.com,to=hr@yy.com,channel=local,folder=Bulk[CACCheckCheck],size=33248,delay=0,rcpttype=to,subject=突破瓶颈,重塑业务竞争力:下载 DevOps 入门白皮书引领企业进步,state=sent,msid=1,mid=1tbiAQEQAGS1ZrcwNwBKsd,score=9.26,id=2
T:1010579200(17:06:00)[S:M001DmwAAPf4uGQOpiYP][da:Info] AQAAfwAHD+v3+Lhkz9QoDw--.27038S2:from=postmaster@yy.com,to=mail-dump-slave@yy.com,channel=local,folder=Bulk[CACCheckCheck],size=33287,delay=0,rcpttype=monitor_forward,subject=[Monitor]突破瓶颈,重塑业务竞争力:下载 DevOps 入门白皮书引领企业进步,state=sent,msid=1,mid=1tbiAQISEGS4Cbg6+QASs9,score=9.26,id=3,hdrfrom=service@marketing.atlas-post.com" | grep -E 'folder=Bulk' | grep -v "from=.*@yy.com"
```
这个命令将输出过滤掉发件人为 `@yy.com` 并且包含字符串 "folder=Bulk" 的信息。你可以将你的文本替换到 `echo` 命令中,然后运行该命令。如果有其他问题,请随时提问!