为什么python不能在我的字典中找到我的值

eoxn13cs  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(149)

Python找不到我的值

我有一个python脚本从我的MySQL数据库中取出我的数据并将其转换为python字典。我试图使用in关键字在python字典中找到我的会话令牌,但由于某种原因它不起作用。
我试着用这个python函数来看看是否有不同的字符串在结尾处有一个奇怪的格式或字符,但这不起作用:
功能:

def difference(string1, string2):
      # Split both strings into list items
  string1 = string1.split()
  string2 = string2.split()

  A = set(string1) # Store all string1 list items in set A
  B = set(string2) # Store all string2 list items in set B
 
  str_diff = A.symmetric_difference(B)
  isEmpty = (len(str_diff) == 0)
 
  if isEmpty:
    print("No Difference. Both Strings Are Same")
  else:
    print("The Difference Between Two Strings: ")
    print(str_diff)
  
  print('The programs runs successfully.')

代码

下面是代码。(这只是一个片段,加密密钥将在启动时更改。)

try:
            import Debug
            Debug.difference(token, USERS['danielcaminero@plairstudio.com']['session'])
            print(token)
            print(USERS['danielcaminero@plairstudio.com']['session'])
            print(USERS)
            # check if user exists
            if token not in USERS:
                print("Doesnt work :(")
                raise Exception('Invalid token')

        except:
            
            return {'message': 'Invalid token'}, 401

输出

No Difference. Both Strings Are Same
The programs runs successfully.
2681bd95970590adcd5950a3f7c90ef7
2681bd95970590adcd5950a3f7c90ef7
{'danielcaminero@plairstudio.com': {'password': '44b4cedfad79d8e47d1430b4da4198f72162dbc0d49452d8dc968546e1b48f14', 'role': '1', 'id': 1, 'session': '2681bd95970590adcd5950a3f7c90ef7'}}
Doesnt work :(
127.0.0.1 - - [09/Apr/2023 14:00:52] "GET /protected HTTP/1.1" 401 -

我需要什么

请告诉我什么可能是错误的,或者我如何使这段代码与我的字典结构一起工作,因为我的程序的某些部分依赖于它。

pdsfdshx

pdsfdshx1#

这对你有用吗?

retval = None
for user in USERS:
    if user['session'] == token:
        print('found it!')
        retval = user
        break # no need to check all others
if not retval:
    print('not found')
    raise Exception('Invalid token')
kqlmhetl

kqlmhetl2#

看起来即使令牌和会话值相同,您的代码也无法在字典中找到会话令牌。出现此问题的一个可能原因可能是存储在字典中的值的数据类型。
当您从MySQL数据库中检索值时,它们可能会以字符串的形式返回。但是,当您将令牌值与字典中的会话值进行比较时,它们可能属于不同的数据类型。
为了确保两个值的数据类型相同,可以在比较它们之前使用str()函数将它们转换为字符串。下面是代码的更新版本:

try:
    import Debug
    Debug.difference(token, str(USERS['danielcaminero@plairstudio.com']['session']))
    print(token)
    print(USERS['danielcaminero@plairstudio.com']['session'])
    print(USERS)
    # check if user exists
    if str(token) not in USERS:
        print("Doesnt work :(")
        raise Exception('Invalid token')

except:
    return {'message': 'Invalid token'}, 401

通过此更改,令牌和会话值在进行比较之前都将转换为字符串,以确保它们具有相同的数据类型

相关问题