字符串中的转义\u

2024-09-30 10:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个要求,我应该存储在数据库中的用户名。这些名称的一般格式是local\username。我偶然发现的用户名之一是local\uat10215。我得到以下错误。你知道吗

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \uXXXX escape

虽然我了解这个问题,但从来没有遇到过它,我不知道什么可以解决这个问题。你知道吗

编辑:

这是我正在进行的Django项目的一部分。它有自己的User模型,其中用户名是字段之一。我有用户名/密码组合用于身份验证。我们还有基于SAML的身份验证,其中IdP是第三方。现在,这个IdP的用户名存储在其一侧,我们只需在应用程序中使用用户模型来引用它。所以实际上,username字段的值不在我的控制之下,值是任何东西。我昨天偶然发现的一个用户名值是local\uat10215。我试图用这个值来更新一个用户的用户名,以便通过shell进行测试,但是出现了上面的错误。如果我使用r'local\uat10215',那么存储在db中的值是local\\uat10215,它与local\uat10215不匹配。至于可复制的代码,只需在ipython中尝试即可

enter image description here

更多信息:

我只是写了这个函数

def bs_test():

    try:
        username = r'local\uat10125'
        print(username)
    except Exception as e:
        print('Exception')

下面是输出。你知道吗

enter image description here

基于此,我认为是伊普顿的行为让我偏离了正轨。你知道吗

我尝试的另一件事是将这样的值从iPython存储到数据库(Postgres)中。我附上屏幕截图演示的操作与输出一起进行。你知道吗

enter image description here


Tags: 用户模型名称身份验证数据库local格式错误
2条回答

您至少应该提供一个生成错误的代码行的示例。你知道吗

不过,我想您应该尝试像这样对原始字符串单引号r'local\uat10215'

另一种解决方案可能是双转义,如local\\uat10215,具体取决于您的代码

问题是由'\u'引起的,它被检测为unicodeescape
要解决这个问题,有两种选择:

  1. 所有后斜杠加倍(即local\\uat10215

  2. 使用原始字符串(即r'local\uat10215'

相关问题 更多 >

    热门问题