为什么在我没有首先使用xrange时没有定义xrange?

时间:2017-10-19 20:46:55

标签: python python-3.x list range

在以下代码段中,

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。尽管编写代码是为了在pyhton2上运行,但我重构了在python3上运行它。但是,我一直在收到以下错误:

................................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的错误。如果有人可以提供帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:7)

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

Python将源代码编译为字节码,并解释后者。这意味着解释器在编译后不能与源代码一起使用。

然而,我们人类无法很好地读取字节码,因此当出现异常且解释器希望我们了解出现问题的地方时,它会再次向您显示源代码。因此,当存在要显示的回溯时,源代码将按需加载,并且根据使用字节码记录的信息从源代码中获取行。

在您的情况下,您正在运行使用名称 <!DOCTYPE html> <html> <head> <style type ="text/css"> p {color: blue;} .underlined { text-decoration: underline } .blue { color: blue } </style> </head> <body> <p class="underlined">This is my body green</p> <p class="blue" >this text should be blue!</p> <h1>Hello World!</h1> <p>This is my first CSS example</p> <ul> <li>This is</li> <li>a list</li> </ul> </body> </html>的字节码。但您已经更正了使用xrange的源代码。字节码引发异常,Python有助于从磁盘加载源代码,并显示已更正的源代码

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

请注意,您可以放弃.pyc来电;您不必拥有list()循环的列表; for工作正常。