首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我一开始不使用xrange时,为什么没有定义xrange?

当我一开始不使用xrange时,为什么没有定义xrange?
EN

Stack Overflow用户
提问于 2017-10-19 20:46:55
回答 1查看 1.6K关注 0票数 6

在下面的代码片段中,

代码语言:javascript
复制
if evaluation_data: 
    n_data = len(evaluation_data)
    n = len(training_data)
    evaluation_cost, evaluation_accuracy = [], []
    training_cost, training_accuracy = [], []
    for j in list(range(epochs)):
        random.shuffle(training_data)
        mini_batches = training_data[k:k+mini_batch_size]

您可以看到,我没有使用xrange.Although --代码是为在pyhton2上运行而编写的,而是重新分解以在python3上运行它。然而,我总是会犯这样的错误:

代码语言:javascript
复制
................................Directory/network2.py", line 147, in SGD
    for j in list(range(epochs)):
NameError: name 'xrange' is not defined

一开始,我只使用range()。然后,在了解到range()不是python3中的列表之后,我做了list(range())。但是,在这两种修改的情况下,我都会得到xrange的错误。如果有人能帮忙就好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-19 20:50:42

您正在运行陈旧的字节码,重新启动Python。

Python将源代码编译为字节码,并对后者进行解释。这意味着解释器编译后不能处理源代码。

然而,我们人类无法很好地阅读字节码,因此当出现异常时,当解释器希望我们了解哪里出错时,它会再次向您展示源代码。因此,当需要显示回溯时,将根据需要加载源代码,并根据字节码记录的信息从源代码中提取行。

在您的示例中,您正在运行使用名称xrange的字节码。但是,您已经更正了源代码,转而使用range。字节码抛出一个异常,Python帮助从磁盘加载源代码,并显示已经更正的源代码

解决方案是通过重新启动告诉Python重新编译源代码。如果重新启动没有帮助,那么Python已经确定源代码比它缓存的字节码更旧。删除源代码旁边的__pycache__目录以清除字节码缓存,并删除可能与源代码位于同一目录中的任何.pyc文件。

请注意,您可以删除list()调用;您不需要有一个列表才能使for循环工作;for j in range(epoch):工作得很好。

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

https://stackoverflow.com/questions/46838639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档