2014-01-14 1 views
-1

У меня есть код, который я бы хотел запустить. Im новой для питона, а также StackOverflowAttributeError: объект 'module' не имеет атрибута 'new'

Вот программа питон:

# Circle Inversion Fractals (Apollonian Gasket) (Escape-time Algorithm) 
# FB36 - 20131031 
import math 
import random 
from collections import deque 
from PIL import Image 
imgx = 512; imgy = 512 
image = Image.new("RGB", (imgx, imgy)) 
pixels = image.load() 
n = random.randint(3, 6) # of main circles 
a = math.pi * 2.0/n 
r = math.sin(a)/math.sin((math.pi - a)/2.0)/2.0 # r of main circles 
h = math.sqrt(1.0 - r * r) 
xa = -h; xb = h; ya = -h; yb = h # viewing area 
cx = [0.0]; cy = [0.0]; cr = [1.0 - r] # center circle 
for i in range(n): # add main circles 
    cx.append(math.cos(a * i)) 
    cy.append(math.sin(a * i)) 
    cr.append(r) 
maxIt = 64 # of iterations 
for ky in range(imgy): 
    print str(100 * ky/(imgy - 1)).zfill(3) + "%" 
    for kx in range(imgx): 
     x = float(kx)/(imgx - 1) * (xb - xa) + xa 
     y = float(ky)/(imgy - 1) * (yb - ya) + ya 
     queue = deque([]) 
     queue.append((x, y, 0)) 
     while len(queue) > 0: # iterate points until none left 
      (x, y, i) = queue.popleft() 
      for k in range(n + 1): 
       dx = x - cx[k]; dy = y - cy[k] 
       d = math.hypot(dx, dy) 
       if d <= cr[k]: 
        dx = dx/d; dy = dy/d 
        dnew = cr[k] ** 2.0/d 
        xnew = dnew * dx + cx[k] 
        ynew = dnew * dy + cy[k] 
        if xnew >= xa and xnew <= xb and ynew >= ya and ynew <= yb: 
         if i + 1 == maxIt: break 
         queue.append((xnew, ynew, i + 1)) 
     pixels[kx, ky] = (i % 16 * 16 , i % 8 * 32, i % 4 * 64) 
image.save("CircleInversionFractal_" + str(n) + ".png", "PNG") 

Когда я бегу, я получаю сообщение об ошибке, но я не знаю, как решить.

Traceback (most recent call last): 
File "U:\Personal\PythonFiles\Python Program Examples\Circle Inversion Fractals.py", line 9, in <module> 
image = Image.new("RGB", (imgx, imgy)) 
AttributeError: 'module' object has no attribute 'new' 

Что означает эта трассировка?

+0

Если вы используете код, который вы пытались использовать, это поможет предоставить более подробный ответ. Возможно, вы пытаетесь использовать синтаксис Ruby в Python для создания объекта? –

+0

Пожалуйста, поделитесь своим кодом, чтобы мы могли помочь вам * исправить * ошибку. Вы пытаетесь использовать модули 'hmac',' sha', 'md5' или' hashlib'? –

ответ

2

Это означает, что вы пытаетесь использовать имя new на объекте модуля:

>>> import sys 
>>> sys.new 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'new' 

Это означает, что sys модуль не имеет атрибута new здесь. Не имеет значения, обрабатываете ли вы new как вызываемый (функция, метод, класс и т. Д.), В выражении sys.new() имя new будет сначала рассмотрено как атрибут.

Если вы пытаетесь использовать модуль, который документированную иметь метод .new() (например, sha.new() или hashlib.new(), то убедитесь, что у вас нет другого модуля с тем же именем в вашем пути. Не назвать свой собственный сценарий sha.py при попытке импортировать стандартный библиотечный модуль sha

вы можете проверить, где модуль был импортирован из напечатав .__file__ файла:

print sha.__file__ 

, и если это не имя файла в вашей установке на Python, вам, возможно, потребуется выяснить, почему у вас есть дополнительный файл на вашем пути и переименовать этот файл или отложить его в сторону.

+0

Awesome .. эта строка 'Не называйте свой собственный скрипт sha.py при попытке импортировать стандартный библиотечный модуль sha!' Сделал трюк! – Deep