【问题标题】:compare response.text and string failed in python比较 response.text 和 string 在 python 中失败
【发布时间】:2023-01-16 16:19:26
【问题描述】:

我的任务是过滤响应,无论它是否是正常响应。

如果 response.text 不是'<Br>No match<br>OK!!',我应该记录响应。

if not response.text == '<Br>No match<br>OK!!':
    logger.info('ERROR!!')

但我仍然可以检查日志文件中的错误消息,即'&lt;Br&gt;No match&lt;br&gt;OK!!'

我按以下方式修复了我的代码,但它不起作用。

if not str(response.text) == '<Br>No match<br>OK!!':
    logger.info('ERROR!!')

response.text 中还有另一条消息编码为ISO-8859-1.日志中的某些文本已损坏,因此我可以获得正确的文本,例如 normalize('NFC', msg).encode('ISO-8859-1').decode('cp949').

u'hello' == 'hello'.encode('ISO-8859-1').decode('cp949')  # True

我的代码有问题吗?或者我应该多检查什么?请帮我。

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    您的代码的问题是 response.text 字符串与您要比较的字符串的编码格式不同。

    首先要检查的是 response.text 的编码以及您要与之进行比较的字符串。似乎 response.text 采用 ISO-8859-1 编码,而您要与之比较的字符串采用不同的编码格式。

    您可以在要比较的字符串上使用 .encode('ISO-8859-1') 方法,在 response.text 变量上使用 .decode('cp949') 方法以确保两个字符串在相同的位置编码格式。

    if not response.text.decode('cp949') == '<Br>No match<br>OK!!'.encode('ISO-8859-1'):
        logger.info('ERROR!!')
    

    另一件要检查的事情是实际的响应消息。它可能包含使比较失败的其他字符或空格。您可以使用 print 函数检查消息或检查 response.content 属性,它以字节格式返回响应的内容。

    print(response.text)
    

    此外,您可以使用正则表达式来匹配所需的字符串并忽略任何其他字符、空格或换行符。

    import re
    
    if not re.search(r'<Br>No match<br>OK!!', response.text):
        logger.info('ERROR!!')
    

    总之,你的代码的问题是response.text是不同的编码格式,所以你需要在比较它们之前确保两个字符串的格式相同,或者使用正则表达式来匹配所需的字符串。

    【讨论】:

    • 谢谢你。 response.text.encode('cp949') 是否在 if not response.text.decode('cp949') == '&lt;Br&gt;No match&lt;br&gt;OK!!'.encode('ISO-8859-1'): 中是您答案中的这段代码?
    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多