Python中字符串在单引号前添加反斜杠的问题

3

我有一个包含引号的字符串,类似于这样:

string = "\"This is my mom's vase\", said Kevin."

问题是当我在Python中将其用作字符串时,它会在单引号之前添加反斜杠,如下所示:

>>> string
'"This is my mom\'s vase", said Kevin.'
>>>

为什么会发生这种情况,我该怎么办? (涉及 IT 技术)

https://dev59.com/A3IOtIcB2Jgan1znERC4#71558069 - S.B
3个回答

6

解释

您看到的是由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.'

当然,这两个字符串完全相同。那些反斜杠只是用于转义目的,它们实际上并不存在于字符串中。您可以通过 print 字符串来确认这一点,该字符串输出了字符串的真实值:
>>> print(string)
"This is my mom's vase", said Kevin.

解决方案

没有什么需要解决的!你还在这里干什么?向上滚动并再次阅读解释!


顺便提一下,如果一个字符串包含单引号但没有双引号,那么repr将在双引号内,以增加可读性。例如:'mom\'s' -> "mom's" - wjandrea

2

这只是在REPL中逃脱了。如果你将其打印出来,就会显示它没有添加斜杠:

print(string)
# output: "This is my mom's vase", said Kevin.

而“repl”只是指“命令行界面,您可以在其中尝试各种操作”。http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop - steveha
它们被转义了,因为在命令行中字符串是用单引号括起来的。 - Tim

-1

我找到了解决方案,它与repr(string)无关,正如@Aran-Fey所提到的,它与API和Jsons响应有关。

正确的方法是不返回字符串或jsons dumps,而是返回响应,这是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)

我认为你正在回答一个不同的问题。 - wjandrea
哦,你正在回答自己的问题,这个问题你已经发布为答案。请不要将问题发布为答案。相反,您可以提出一个新问题并自己回答 - wjandrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接