【发布时间】:2014-07-26 00:02:23
【问题描述】:
我有一个包含这样引号的字符串:
string = "\"This is my mom's vase\", said Kevin."
问题是当我在 python 中将它用作字符串时,它会在单引号之前添加一个反斜杠,如下所示:
>>> string
'"This is my mom\'s vase", said Kevin.'
>>>
为什么会发生这种情况,我该怎么办?
【问题讨论】:
我有一个包含这样引号的字符串:
string = "\"This is my mom's vase\", said Kevin."
问题是当我在 python 中将它用作字符串时,它会在单引号之前添加一个反斜杠,如下所示:
>>> string
'"This is my mom\'s vase", said Kevin.'
>>>
为什么会发生这种情况,我该怎么办?
【问题讨论】:
您看到的是由repr 函数生成的字符串的表示形式。 repr 以这样的方式输出字符串,即它们是有效的 Python 文字;换句话说,您可以将repr(string) 的输出复制/粘贴到python 程序中而不会出现语法错误:
>>> string
'"This is my mom\'s vase", said Kevin.'
>>> '"This is my mom\'s vase", said Kevin.' # it's valid python code!
'"This is my mom\'s vase", said Kevin.'
因为您的字符串同时包含单引号 ' 和双引号 ",python 必须转义其中一个引号才能生成有效的字符串文字。与您使用反斜杠转义双引号的方式相同:
"\"This is my mom's vase\", said Kevin."
Python 选择转义单引号:
'"This is my mom\'s vase", said Kevin.'
当然,这两个字符串完全相同。这些反斜杠仅用于转义目的,它们实际上并不存在于字符串中。您可以通过printing 字符串来确认这一点,它会输出字符串的真实值:
>>> print(string)
"This is my mom's vase", said Kevin.
没有什么可以解决的!你还在这里做什么?向上滚动并再次阅读说明!
【讨论】:
'mom\'s' -> "mom's"
它只是在REPL 中转义。如果打印出来,会显示没有添加斜线:
print(string)
# output: "This is my mom's vase", said Kevin.
【讨论】:
我找到了解决方案,它与 repr(string) 无关,正如@Aran-Fey 提到的,它与 API 和 Jsons 响应有关。
正确的方法是您不返回字符串或 jsons 转储,而是返回您提到的 http 协议解释的响应:\"(对每个字符串进行后退)。
解决办法是如下做出http响应:
from flask import request, jsonify, make_response
from flask_restful import Resource
from flask_api import status
class employeeHiring(Resource):
def post(self):
#YOUR CODE ....
return make_response(jsonify({'status': 'success', 'my Dict': dict}), status.HTTP_201_CREATED)
【讨论】: