首页 > 解决方案 > 为什么双反斜杠在python字典中不起作用

问题描述

我有一个 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字符串值放在前面以及它们的组合,仍然没有...

本质上期望字典的输出显示/保持/指向my\password而不是my\\password

标签: pythondictionarypython-3.7

解决方案


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

但是,当您专门调用它 iex['myserver']['PWD']时,该字符串中的转义将被处理,因为它被调用、处理并因此被作为单个字符串处理,并且字符串中的所有转义都将被处理。

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


推荐阅读