为什么双反斜杠在 python 字典中不起作用

Why does double backslash not work in python dictionary

我有一个 python 字典,其中包含如下所示的连接详细信息:

x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': 'my\password'
    }
}

我希望 PWD 的值为 my\password,但我得到的却是 my\password

作为一个独立的字符串,即

pwd = 'my\password'
# returns my\password

所以我试过了(但还是不行):

pwd = 'my\password'
x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': pwd
    }
}

也试了四个反斜杠\\,只试了一个反斜杠\(报错),试过把r放在字符串值前面和它们的组合,还是不行...

本质上期望字典的输出为 display/hold/point 到 my\password 而不是 my\password

你如何验证它不起作用? 使用打印功能,您可以看到它完全符合您的预期:

x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': 'my\password'
    }
}

print(x)

print(x['myserver']['PWD'])

输出:

{'myserver': {'DSN': 'servername', 'DATABASE': 'mydatabase', 'UID': 'myusername', 'PWD': 'my\password'}}

my\password

这个“问题”本质上取决于您如何在代码中调用 'PWD' 的值。简单地 打印整个字典将不会处理反斜杠,或 r 字符串,或任何你用来转义反斜杠字符的东西 。这就是为什么在调用整个字典时会得到 2 个反斜杠的原因。 注意 - 即使将其设为 r 字符串也不会改变这一点,因为 r 字符串经过并在每个反斜杠后面添加一个额外的反斜杠以自动将其转义。

但是,当您具体调用它时,即 x['myserver']['PWD'],该字符串中的转义符将被处理,因为它被调用、处理并因此被处理为单个字符串和字符串中的所有转义都将被处理。

总而言之,如果你调用整个字典,甚至是嵌套的内部字典,字符串将不会被处理,所以\会出现在你想要的任何地方\要获得输出my\password,具体调用值,如x['myserver']['PWD'].