Gradio由TypeError: str is not valid UTF-8: surrogates not allowe引起ERROR:Exception in ASGI application

在将Retrieval-based-Voice-Conversion-WebUI部署到Ubuntu服务器时遇到ASGI应用错误,主要是由于非有效UTF-8编码的字符串导致。分析过程中,尝试更改GradioUI组件名称和定位错误源,发现问题出在含有中文的预训练模型列表uvr5_names。修改为英文名称后解决了TypeError。

目录

一,错误信息

二,分析

      尝试1

      尝试2

三,解决办法


一,错误信息

        在尝试Retrieval-based-Voice-Conversion-WebUI声音项目时,在本地(Win10)可以正常运行,在服务器上(Ubuntu20.04)时,出现一下问题。

ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 428, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    return await self.app(scope, receive, send)
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/fastapi/applications.py", line 276, in __call__
    await super().__call__(scope, receive, send)
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/home/lixianbo/miniconda3/envs/voice/lib/python3.10/site-packages/starlette/middleware/cors.py", line 84, in __call__
 
### 解决 Gradio 本地 URL 访问时 ASGI 应用异常问题 当遇到 `pydantic.errors.PydanticSchemaGenerationError` 错误时,这通常意味着 Pydantic 在尝试自动生成模式验证逻辑时遇到了无法处理的情况。对于基于 FastAPI 或 Starlette 的应用程序,在集成 Gradio 并通过 ASGI 运行时可能会触发此类错误。 为了有效解决这个问题,可以采取以下措施: #### 修改依赖注入方式 如果是在定义 API 路由处理器中直接使用了来自请求对象的数据结构作为参数,则应调整为手动解析 HTTP 请求体并转换成目标数据模型实例的方式[^1]。 ```python from fastapi import Request, Depends from pydantic import BaseModel class MyData(BaseModel): name: str age: int async def parse_body(request: Request) -> MyData: raw_data = await request.json() return MyData(**raw_data) @app.post("/submit") async def submit(data: MyData = Depends(parse_body)): # 处理 data... pass ``` #### 更新库版本 确保所使用的 Pydantic 和其他相关框架均为最新稳定版,因为开发者可能已经在后续更新中修复了该 bug。 #### 自定义 JSON 编解码器 有时默认的编码机制可能导致某些复杂类型的序列化失败,为此可实现自定义编解码方法来绕过潜在冲突点。 ```python import json from typing import Any def custom_json_dumps(v: Any, *, default) -> str: try: return json.dumps(v, default=default) except TypeError: return json.dumps({"error": "Failed to serialize object."}) app = FastAPI(default_response_class=JSONResponse) app.json_encoder = custom_json_dumps ``` #### 配置环境变量 检查运行环境中是否存在影响中间件行为设置项,并适当调整以适应当前项目需求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值