如何在python中将字符串放在两行上?

How to put string on two lines in Python?

本问题已经有最佳答案,请猛点这里访问。

我对python、pycharm和web api测试的世界是全新的。

我尝试测试在Web API中发生错误时显示的错误消息。此错误消息由两部分组成,分别显示在两行上。

但不知何故,我为比较生成的任何字符串定义总是显示在一行上。

这是我尝试的方法之一-在两个部分之间创建一个带有新行的字符串。

1
2
3
4
5
6
7
8
9
    wp_error = 'This page can\'t be saved.
 Some required information is missing.'


    # create new workspace and save it without filling up any information.
    self.test_mycode.click_and_wait(self.workspace_overview.new_workspace_button,
                                     self.new_workspace._save_button_locator)
    self.new_workspace.save_button.click()

    self.message.check_message('error', wp_error)

但这不起作用,我得到:

检查中的消息assert.equal(message.message_body.text,message_text)

1
2
3
4
5
6
7
8
9
self = <class 'unittestzero.Assert'>
first ="This page can't be saved.
Some required information is missing."

second ="This page can't be saved.
 Some required information is missing."

.....

>       assert first == second, msg
E       AssertionError: None

所以我的问题是如何定义字符串来适当地测试出现在两行上的错误消息?谢谢您。


如果:

1
2
3
4
5
first ="""This page can't be saved.
Some required information is missing."""

second ="This page can't be saved.
 Some required information is missing."

assert first == second

失败,那么问题可能是:

1
2
3
4
first  =="This page can't be saved.
Some required information is missing."

second =="This page can't be saved.
 Some required information is missing."

也就是说,在换行后的第二个空格中有一个多余的空格。(还要注意三个引号,以便允许字符串跨行而不让编译器抱怨,)

解决方案:您可以:

  • 对测试数据要非常小心。

  • 使用"垫片"允许"近似相等"。例如:

    1
    2
    3
    4
    5
    6
    7
    import re
    FOLD_WHITESPACE = re.compile(r'\s+')

    def oneline(s):
       return FOLD_WHITESPACE.sub("", s)

    assert oneline(first) == oneline(second)

    我并不认为这个特殊的转换是所有字符串比较的理想转换,但它是一个简单的转换,可以满足您不必过分关注空白(包括换行符)。

    类似的"几乎等于"或"转换等于"测试对于测试字符串和浮点值通常很方便或是必需的。

    顺便说一句,如果您使用的是assert的对象调用版本,它可能会被解释为:

    1
    2
    Assert.equal(oneline(message.message_body.text),
                 oneline(message_text))