我无法随机进入work-python 3

时间:2014-09-10 23:37:31

标签: python python-3.x random

我已经写出以下代码来尝试生成随机数 -

import random
def main(): 
   a=random.randint(1,100)
   b=random.randint(1,100) 
   print (a)
   print (b)

main() 

运行程序后,我收到了这条消息:

  

File" /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/random.py" ;,第41行,在模块中

     
    

从数学导入日志为_log,exp为_exp,pi为_pi,e为_e,ceil为_ceil

         
      

ImportError:' math':b' \ x03 \ xf3 \ r \ n

中的错误幻数     
  

1 个答案:

答案 0 :(得分:2)

ImportError: bad magic number in 'math': b'\x03\xf3\r\n

幻数b'\ x03 \ xf3 \ r \ n'表示Python 2.7。我不确定在哪里可以找到它,但是因为你在Mac上,你可以运行Apple预装的Python2.7并查看:

$ /usr/bin/python2.7
>>> import imp
>>> imp.get_magic()
'\x03\xf3\r\n'

所以,不知怎的,你math.pyc上有一个2.7 sys.path,当然3.4无法加载它。


另请注意,2.x和3.x中的标准CPython math模块是纯C扩展模块 - 也就是说,它是.so文件,而不是{{1文件,因此该模块没有.py。您必须编写或下载一些名为.pyc的模块,并在某些时候在Python 2.7中使用它。

除非你使用非CPython实现,否则在stdlib中可能会有math.py。如果你正在使用PyPy,我怀疑你知道你正在使用它,所以如果你不知道我在说什么,请追溯跳过这一段。


很可能只是在当前目录或其math.py中。要找到答案,请执行以下操作:

__pycache__

如果出现任何问题,那就是问题,你必须将其删除。但首先,您可能希望确保您仍然拥有它来自的$ find . -name 'math*.pyc' 文件,或者不需要它。 (或者,如果您不确定,可能只是将其移到某处,而不是删除它。)


但是,您也可以将它安装在math.py上不应该安装的地方,或者安装在2.7以下的地方({1}} sys.path但不是你的sys.path sys.path,而是。

当您无法成功2.7并在3.4+中查看模块时,找出模块所在位置的最简单方法是:

import

您将在某处找到名为>>> import importlib >>> importlib.util.find_spec('math') ModuleSpec(name='math', loader=<_frozen_importlib.ExtensionFileLoader object at 0x102e065c0>, origin='/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload/math.so') (或math.pyc)的文件。你需要弄清楚的是,“某处”是否应该在你的路径上,或者该文件是否应该在某个地方。这很有可能是显而易见的,因为文件的路径中将包含2.7或3.4。

如果您想知道自己的路径是什么,请执行以下操作:

math-SOMETHING.pyc

这应该显示一个路径列表,包括>>> import sys >>> sys.path ,3.4 stdlib,3.4系统和用户站点包,任何与.pth文件一起安装的鸡蛋等。它不应包含任何内容2.7或未版本控制。