为什么全球化布尔值不起作用但全球化字典却起作用

2024-01-31

这只是一个想知道为什么这不起作用的问题。我想出了一个更好的方法,但我不知道为什么以前它不起作用。

global mydict
mydict = {}

这似乎工作得很好,并且使 mydict 字典成为全球性的。我什至打印 mydict 并且它有效。但是,这样做:

global bool
bool = False

似乎不起作用。如果尝试在我的代码中打印 bool ,我会得到:

UnboundLocalError: local variable 'bool' referenced before assignment

那么为什么它适用于字典而不是布尔值呢?

哦,另外,如果有人想知道我如何找到更好的方法,我会初始化一个类,并通过执行以下操作使 bool 在类中全局化: self.bool = False ,这有效。我从这个问题中得到了它:使所有变量全局化 https://stackoverflow.com/questions/10775411/making-all-variables-global


编辑:根据要求,我将发布必要的代码:

import chatbot
global mydict
mydict = {}
global haveamessage
haveamessage = False

class MyBot(chatbot.ChatBot):
    def __init__(self, username, password, site):
        chatbot.ChatBot.__init__(self,username,password,site)

    def on_message(self, c, e):
        print mydict
        print haveamessage

if __name__ == '__main__':
    bot = MyBot("MyUsername", "MyPassword", "MySite")
    bot.start()

我将尝试解释这段代码。聊天机器人模块几乎是允许用户在 Wikia 上的 wiki 中创建机器人,Wikia 是一家允许创建任何人都可以编辑的 wiki 的公司。维基百科上有一个聊天扩展,用户可以在其中进行交谈。该脚本允许机器人加入聊天并执行命令。当有人在聊天中发布内容时,on_message() 就会关闭。

所以这会打印:

{}
Traceback (most recent call last):
  File "file.py", line 146, in <module>
    bot.start()
  File "/Library/Python/2.7/site-packages/chatbot.py", line 371, in start
    self.on_message(self.c, e)
  File "file.py", line 12, in on_message
    print haveamessage
UnboundLocalError: local variable 'haveamessage' referenced before assignment

我想澄清一下,这不会对你们所有人产生错误的原因是因为你们不在 Wikia 聊天中。 on_message() 函数仅在有人在聊天中发布内容时运行。例如,我可能有:

def on_message(self, c, e):
    if e.text == 'hello': # e.text is what a user posts in the chat. e = event
        c.send('Hello!') # c.send simply sends back a message in the chat. c = connection

因此,当有人在聊天中发布 hello 时,机器人会回复 Hello!


您发布的代码不会产生您声称的错误。然而使用global函数外部的关键字没有任何作用,因此它不像您期望的那样工作也就不足为奇了。

我假设在你的真实代码中,你实际上试图分配给haveamessage inside on_message。如果是这样,您需要一个global该方法内的声明。

基本上规则是:如果您尝试从函数内分配全局变量,则需要使用global该函数中的关键字。否则你不需要global根本没有关键字。变量是否为布尔值没有区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么全球化布尔值不起作用但全球化字典却起作用 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐