为什么双反斜杠在 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


红糖糍粑
浏览 159回答 2
2回答

海绵宝宝撒

这个“问题”本质上取决于您如何'PWD'在代码中调用 的值。就此而言,简单地打印整个字典不会处理反斜杠或 r 字符串,或任何你用来转义反斜杠字符的东西。这就是为什么在调用整个字典时会得到 2 个反斜杠的原因。注意 - 即使将其设为 r 字符串也不会改变这一点,因为 r 字符串会经过并在每个反斜杠后面添加一个额外的反斜杠以自动将其转义。但是,当您特别调用它时x['myserver']['PWD'],即会处理该字符串中的转义符,因为它被调用、处理并因此作为单个字符串处理,并且字符串中的所有转义符都将被处理。总而言之,如果你调用整个字典,甚至是嵌套的内部字典,字符串将不会被处理,所以\\会出现在你想要的任何地方\。要获得输出my\password,请专门调用该值,例如x['myserver']['PWD'].

守着星空守着你

你如何验证它不起作用?使用 print 函数,您可以看到它完全符合您的预期: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python