python字符串格式中自动添加的反斜杠,pycharm

Posted

技术标签:

【中文标题】python字符串格式中自动添加的反斜杠,pycharm【英文标题】:Auto-added backslashes in python string formatting, pycharm 【发布时间】:2017-11-26 18:02:33 【问题描述】:

在格式化字符串时,我有一个奇怪的行为,例如:

"""select username from users, price where pricing_id ='r' and price.REQUESTER=users.ID;""".format(r=pr)

这给了我:

'select username from users, price where pricing_id =\\'ID123\\' and price.REQUESTER=users.ID;'

注意每个引号前不需要的转义。在 Python 控制台中执行相同的操作会得到正确的结果,但在 Pycharm 中运行(或评估)会产生自动添加的反斜杠。有人遇到过类似的事情吗?这是py3.5环境。

编辑/

【问题讨论】:

【参考方案1】:

我不清楚当你说“正在运行”时你在哪里看到了意外的输出,因为你没有给出关于如何将字符串传送到终端的提示。您的意思是调试器以这种方式显示它吗?

不过,一般来说,我总是看到 PyCharm 通过调用对象的 __repr__() 方法“做正确的事”,按照惯例,如果合理可能,返回一个可以被评估以实例化相同对象的字符串。因此,转义字符串在这个意义上是有效的。

Python 的 str 类型很简洁,因为它更喜欢用单引号引用值,但如果值包含单引号,则会使用双引号。从记忆中,我不记得它是否会变得更漂亮,比如如果两者都存在,则使用三引号。

因此,我怀疑您的“格式化字符串”可能不是简单的str(因为它只有单引号)。 type(FOO) 返回什么 FOO 是你分配这个值的地方?

【讨论】:

它是一个字符串,这里毫无疑问。但是,没关系,因为我也尝试过数字,结果是一样的。当我说“运行”时,我的意思是运行,那么你启动了一个 py 模块。首先它在与数据库通信时产生错误'unexpected caracters',所以我调查了一下,我看到引号用反斜杠转义,这显然是错误的。我希望我的 SQL 语句以“field='string_value'”而不是“field=\\'string_value\\'”的形式传送到数据库。 你没有回答我的任何一个问题。显然,程序可以以无数种方式将信息输出到终端。 print() 恰好是一种方式,但我只能猜测您的字符串是如何打印的。 PyCharm 也可以输出值,但 Run 本身不会这样做,除非你的程序这么说。创建模拟str(例如,SqlQueryString)的对象类型是微不足道的,但它的行为可能不同并且很容易解释看到的但从来没有尽管多年来每天都在使用 PyCharm。 一张图胜过1000字 啊,这很有帮助。我可以在这里用最新的 EAP 版本重现它。在我看来很明显是一个错误——事实上这是一个:youtrack.jetbrains.com/issue/PY-19383 是的,它看起来像这个......顺便说一句,我已经联系了 JetBrains,我希望这会得到纠正

以上是关于python字符串格式中自动添加的反斜杠,pycharm的主要内容,如果未能解决你的问题,请参考以下文章

python 中的反斜杠匹配的问题

为啥JSON字符串当中会出现反斜杠?

从 Laravel 中的 JSON 字符串中删除添加的反斜杠

Python基础要点:字符串和正则表达式中的反斜杠(‘‘)问题详解

关于python3中文件名里的反斜杠问题,不需要转义吗?

Parse 的 javascript CloudCode 的 httprequest 字符串操作添加额外的反斜杠