ValueError: unsupported format character 'w' (0x77) at index 650

ValueError: unsupported format character 'w' (0x77) at index 650

这是我在 Whosebug 中的第一个 post,希望我的问题得到解答。 我试图在 html 页面上打印从 python 代码发送的字符串,但是当我 return 在 html 页面上打印字符串时,它显示了这个错误:“ ValueError:索引 650 处不支持的格式字符 'w' (0x77)”。 这是 python 代码:

def doctor_post(self, name, userID, password, telegramID):
    resp=open("response.html").read()
    new = {
        "name": name,
        "userID": userID,
        "password": password,
        "telegramID": telegramID,
        "patientsList": []
    }
    r = requests.post(self.Catalog+"/doctor", json=new)
    if r.status_code==200:
        out=resp % "Registered"
        return out

而 html:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Response</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>


<body>
    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <h1 style="text-align: center;"> Response</h1>

    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <!--The string specified in the python script after % will go instead of %s-->
    <h3 style="text-align: center;">%s</h3>
    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <p style="text-align: center;"><input type="button" onclick="document.location.href='/';" value="Homepage"><br></p>

</body>
</html>

就我个人而言,我宁愿使用“替换”:

  • 在 html 中,而不是 %s 我会使用 ___RESPONSE_VALUE___
  • 在python代码中out = resp.replace("___RESPONSE_VALUE___", "Registered")

对于更复杂的项目,我建议你检查 Jinja2 库,它非常适合模板化

这里的问题是您的 html 文件中有一个 % w

python 中的“%”运算符搜索字符串中的所有 % 字符,并根据下一个字符进行一些替换。

要将“%s”保留为占位符值,请将所有文字 % 替换为 %%

如其他人所述,最好使用“%s”以外的其他内容作为占位符,例如 ___RESPONSE_VALUE___{{ RESPONSE_VALUE }} 或使用模板系统,例如 jinja.

PS:Python还有比"%"更高级的str.format功能:

print("Hello {} !".format("You"))