Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python dict的行为不一致

Python dict的行为不一致
EN

Stack Overflow用户
提问于 2020-02-11 18:08:48
回答 1查看 82关注 0票数 0

我有一个单独的python字典实例作为全局变量。我只在代码的开头给它赋值。有时dict.get()返回正确的对象,有时返回None。我找不到它的模式。

代码是一个等待HTTP请求并发送响应的web客户端。我初始化了一个名为active_games的字典来保存游戏列表,其中的键是来自服务器的游戏ids。调用start()时会将游戏对象添加到字典中,直到调用end()时才会将其删除。在这两者之间,move()被调用多次(通常是每秒多次)。move()中的print语句有时打印正确的字典,有时打印空的字典,然后抛出错误。

以下是代码的相关部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json
import os
import bottle

from api import ping_response, start_response, move_response, end_response
from game import game

# Store all games running on server
active_games = dict()

@bottle.post('/start')
def start():
    global active_games
    data = bottle.request.json
    new_game = game(data["game"]["id"])

    active_games[str(data["game"]["id"])] = new_game

    print(active_games)

    return new_game.start(data)

@bottle.post('/move')
def move():
    global active_games
    data = bottle.request.json

    print(active_games)

    return active_games.get(str(data["game"]["id"])).move(data)

@bottle.post('/end')
def end():
    data = bottle.request.json

    game_ending = active_games.pop(data["game"]["id"])

    return game_ending.end(data)

为什么dict.get()不能工作?谢谢你的帮助!如果有帮助,我可以编辑以添加日志和堆栈跟踪

EN

回答 1

Stack Overflow用户

发布于 2020-02-11 18:34:00

看一下您发布的代码片段,我认为它与start()end()方法中的global active_games行有关。

全局关键字用于从非全局作用域创建全局变量,例如在函数内部。”(https://www.w3schools.com/python/ref_keyword_global.asp,最后一次调用是在2020年2月2日,w3cschools.com -> Python Tutorial -> Python全局关键字->定义和用法)

但是您不需要在这些函数中声明您的active_games字典,因为您已经在脚本的开头声明了它们,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Store all games running on server
active_games = dict()

因此,global active_games所做全部工作就是使用同名的空变量覆盖您的active_games字典,这就是None返回值的来源。

从您的问题描述可以看出,这可能并不是幕后发生的事情,但您至少可以从代码中删除任何global active_games实例,然后再与我联系

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60175011

复制
相关文章
python字典dict方法_python中dict的用法
Python字典是另一种可变容器模型,可存储任意类型对象。如字符串、数字、元组等其他容器模型 因为字典是无序的所以不支持索引和切片。
全栈程序员站长
2022/11/08
1.2K0
python字典dict方法_python中dict的用法
python|Python中的dict
1、格式:{key1:value1,key2:value2,key3:value3,….. } ;
算法与编程之美
2019/12/17
2.2K0
python dict
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
py3study
2020/01/09
4140
Python中的dict
# dict # Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} print('dict get Michael:', d['Michael']) # add a element d['Adam'] = 67 print('dict d', d) # change a element d['Adam'] 
py3study
2020/01/12
5280
Python的dict()函数
描述dict() 函数用于创建一个字典。语法dict 语法:class dict(**kwarg)class dict(mapping, **kwarg)class dict(iterable, **kwarg)参数说明:**kwargs -- 关键字mapping -- 元素的容器。iterable -- 可迭代对象。返回值返回一个字典。实例以下实例展示了 dict 的使用方法:>>>dict() # 创建空字典{}>>> dict(a='a', b='b', t='t') # 传入关键字{'a': 'a
狼啸风云
2019/09/25
5770
python dict常用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/78806792
bear_fish
2018/09/14
5710
Python -- dict 类
    def clear(self):  #清除字典中所有元素形成空字典,del是删除整个字典;
py3study
2020/01/13
4920
Python 字典 dict
有时候为了方便起见,就算某个键在映射里不存在,我们也希望在通过 这个键读取值的时候能得到一个默认值。有两个途径能帮我们达到这个目的,一个是通过 defaultdict,这个类型而不是普通的 dict,另一个 是给自己定义一个 dict 的子类,然后在子类中实现 __missing__ 方法。
为为为什么
2022/08/09
8250
Python 字典 dict
Python中的list(), dict(), [], {}
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2020/06/04
1.4K0
Python 合并 dict
Python 两个或多个字典(dict)合并(取字典并集) 1、 Python 3.9.0 或更高版本使用| x = {'C': 11, 'Java': 22} y = {'Python': 33, 'CJavaPy': 44} z = x | y print(z) 注意:TypeError: unsupported operand type(s) for |: 'dict' and 'dict' 这个错误原因是Python是Python 3.9.0之前版本,不支持这个语法。 2、Python 3.5 或更
chuchur
2022/10/25
8030
Python dict()函数
参数说明:key/value -- 用于创建字典的键/值对,可以表示键/值对的方法有很多。
用户7886150
2021/01/23
7950
Python字典dict
举个例子,假设要根据同学的名字查找对应的成绩,如果用列表(list)实现,需要两个list:
py3study
2020/01/14
6450
Python 遍历 dict
字典提供了 items () 方法返回字典中所有的键值对 item 键值对 item 是一个元组(第 0 项是键、第 1 项是值)
chuchur
2022/10/25
5740
python 字典dict
前面的课程讲解了字符串str/列表list/元组tuple,还有最后一种比较重要的数据类型也需要介绍介绍,那就是python字典,俗称:dict.
猿说编程[Python和C]
2020/02/26
1.3K0
python 字典dict
python基础—dict
d = dict(((1,‘a’),(2,‘b’))) d {1: ‘a’, 2: ‘b’}
dogfei
2020/07/31
4870
python 字典dict
# -*- coding: utf-8 -*- # ****************************** 创建 *************************** dict1 = {} #定义1个元素的字典 dict2 = {'pi': 3.14} print(dict2)  #{'pi': 3.14} dict3 = {1: 2} print(dict3)  #{1: 2} dict4 = dict([[1, 2], ('a', 'b')]) print(dict4)  #{'a': 
py3study
2020/01/13
4920
python dict的list排序
对于简单的list排序,直接调用内建函数就可以了,但是对于dict的list排序就没有那么直接了,不过,还是有很简洁的办法的,如:
py3study
2020/01/14
1.9K0
python的dict,set,list
字典(dict) dict 用 {} 包围  dict.keys(),dict.values(),dict.items()  hash(obj)返回obj的哈希值,如果返回表示可以作为dict的key  del 或 dict.pop可以删除一个item,clear清除所有的内容  sorted(dict)可以吧dict排序  dict.get()可以查找没存在的key,dict.[]不可以  dict.setdefault() 检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。  {}.fromkeys()创建一个dict,例如: {}.fromkeys(('love', 'honor'), True) =>{'love': True, 'honor': True}  不允许一个键对应多个值  键值必须是哈希的,用hash()测试  一个对象,如果实现_hash()_方法可以作为键值使用
py3study
2020/01/06
9470
Python 字典 — dict
del goods_dict[key]、goods_dict.pop(key) 都是指定键key,删除字典内的键值对。
忆想不到的晖
2021/12/06
7030
Python 字典 — dict
Python Dict用法
dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}
py3study
2020/01/06
5220

相似问题

dict python的奇怪行为

30

奇怪的python dict行为

47

Python dict子类实例的行为与dict实例不同

10

默认dict索引困扰python dict.get()行为

21

Python3.x和Python2.7中dict.values()和dict.keys()相等的不一致行为

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文