2013-04-05 39 views
4

我在Windows上遇到了Python 2.7.3-32bits的問題。我把這段代碼看看是否有人能幫我解決這個錯誤。評論以西班牙文發表,但不影響代碼。TypeError:錯誤操作數類型爲一元 - :'str'

import gtk 
import numpy 
import math 
import os 

#Pedimos el nombre de la imagen de origen 
nombreFich = input("Por favor, introduzca el nombre de la imagen de origen:") 

#Validar que existe el fichero 
imagen1 = gtk.Image() 
imagen1.set_from_file('C:\\Users\\xxx\\Desktop\\xxxx.png') 
pb1 = imagen1.get_pixbuf() 
pm1 = pb1.get_pixels_array() 

#Hacemos una copia de la imagen 
pm2 = pm1.copy() 

#Validamos los puntos de distorsion hasta que sean validos 
puntos = " " 
arrayPuntos = " " 
while(puntos == " " and len(arrayPuntos) < 4): 
    print"Por favor, introduzca los puntos de distorsión xc yc r e:" 
    puntos= raw_input() 
    arrayPuntos = puntos.split(" ") 

#Sacamos los puntos separando la cadena por el caracter espacio 
xc =(puntos[0]) 
yc =(puntos[1]) 
r =(puntos[2]) 
e =(puntos[3]) 

#función que calcula el grado de distorsión 
def grado(self,z,e): 
    if(z>1): 
     return 1 
    elif(e<0): 
     return (1/z)**(-e/(1-e)) 
    else: 
     return z**e 

#Distorsionamos la imagen 
def distors(xc,yc,r,e,x,y): 
    d = math.sqrt(x**2+y**2)#Sacamos la distancia 
    z = d/r 
    if(z!=0): 
     g=grado(z,e) 
     xm=x*g 
     ym=y*g 
     return xm,ym 

    else: 
     xm=x 
     ym=y 
     return xm,ym 
def recorrido (pm1, xc, yc, r, e): 
    pm2 = pm1.copy() 

    x= str(--r) 
    y= str(--r) 
    while (y <= r):      
     while (x <= r): 
      xm, ym = mover(xc, yc, r, e, x, y) 
      pm2[yc+y][xc+x] = pm1[yc+ym][xc+xm] 
      x = x+1 
     y= y+1 
     x= -r 


    return pm2 
pm2 = recorrido(pm1, xc, yc, r, e) 

#Guardamos los cambios 
pb2 = gtk.gdk.pixbuf_new_from_array(pm2,pb1.get_colorspace(),pb1.get_bits_per_sample()) 
nomfich2 = nombreFich+"_copia" 
ext = os.path.splitext("C:\\Users\xxx\Desktop\xxxx.png_copia")[1][1:].lower() 
pb2.save("C:\\Users\xxx\Desktop\xxxx.png_copia",ext) 
print"FINISH" 

當我運行Python代碼我得到以下錯誤:

Traceback (most recent call last): 
    File "F:\Dropbox\Práctica Pitón\Práctica3.0.py", line 71, in <module> 
    pm2 = recorrido(pm1, xc, yc, r, e) 
    File "F:\Dropbox\Práctica Pitón\Práctica3.0.py", line 59, in recorrido 
    x= str(--r) 
TypeError: bad operand type for unary -: 'str' 

回答

4

該錯誤消息告訴你,r是一個字符串。你不能否定一個字符串。

爲什麼它是一個字符串?好吧,它似乎來自這裏:

# ... 
puntos= raw_input() 
arrayPuntos = puntos.split(" ") 
# ... 
r =(puntos[2]) 

字符串的split方法返回一個字符串列表。

那麼,你如何解決這個問題?那麼,如果r是字符串「22」,那麼float(r)是浮點數22.0,而int(r)是整數22。其中之一可能就是你想要的。

一旦你添加了,比方說,r=int(r),你的--r將不再是一個例外。


但它可能不是你想要的。在Python中,--r僅僅意味着否定r的否定,換句話說,它與-(-(r))相同,這只是r。您可能正在尋找C前綴運算符--的等效項,該運算符會減少變量並返回新值。 Python中沒有這樣的操作符;實際上,沒有修改變量然後返回值的運算符。

這是一個大問題的一部分。 Python旨在使語句和表達儘可能不同,以避免混淆。 C旨在儘可能多地表達事物,以節省打字量。所以,你經常不能一個一個地把它翻譯成另一行。

在這種情況下,你必須做的兩個步驟,如Thanasis Petsas顯示:

r -= 1 
x = str(r) 
2

增量++和減少--運營商不支持的蟒蛇。 您可以使用,而不是這樣的:

r -= 1 
x = str(r) 
+1

這是真的,但它不是,爲什麼他得到這個錯誤。 – abarnert 2013-04-05 23:39:30

相關問題