Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2017 10:19:42

Narek
Зарегистрирован: 2016-01-29
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Python непонятная ошибка

У меня небольшой скрипт, Python дает ошибку, с которим ни как не разбираюсь.

 import pyodbc
cnxn = pyodbc.connect(
    'DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;axScanRows=8;MaxBufferSize=2048;FIL={MS Access};DriverId=25;DefaultDir=C:\Users\Narek\Desktop;DBQ=C:\Users\Narek\Desktop\db2.mdb;Uid=myusername;Pwd=password;')
cursor = cnxn.cursor()
class Point:
    def __init__(self, x=0, y=0, z=0):
        self.x = x
        self.y = y
        self.z = z
p = Point()
SQLpx = ("select Xcor from Points where Xcor = 7")
SQLpy = ("select Ycor from Points where Ycor = 7")
SQLpz = ("select Zcor from Points where Xcor = 7 and Ycor = 7")
for row in cursor.execute(SQLpx):
    p.x = row.Xcor
for row in cursor.execute(SQLpy):
    p.y = row.Ycor
for row in cursor.execute(SQLpz):
    p.z = row.Zcor
p = Point(p.x,p.y,p.z)
for i in range(0, 10):
    x1 = p.x - 1
    y1 = p.y + 1
    z1 = 0
    p1 = Point()
    if (x1 <= 0 and x1 > 10 or y1 <= 0 and y1 > 10):
            print("Wrong arguments")
    else:
            SQLp1z = "SELECT Zcor FROM Points WHERE Xcor = {x1} AND Ycor = {y1}".format(x1=x1, y1=y1)
            for row in cursor.execute(SQLp1z):
                z1 = row.Zcor
                p1 = Point(x1, y1, z1)
            print (p1.x, p1.y, p1.z)
    x2 = p.x - 1
    y2 = p.y - 1
    z2 = 0
    p2 = Point()
    if (x2 <= 0 and x2 > 10 or y2 <= 0 and y2 > 10):
            print("Wrong arguments")
    else:
            SQLp2z = "SELECT Zcor FROM Points WHERE Xcor = {x2} AND Ycor = {y2}".format(x2=x2, y2=y2)
            for row in cursor.execute(SQLp2z):
                z2 = row.Zcor
                p2 = Point(x2, y2, z2)
            print (p2.x, p2.y, p2.z)
    x3 = p.x - 1
    y3 = p.y
    z3 = 0
    p3 = Point()
    if (x3 <= 0 and x3 > 10 or y3 <= 0 and y3 > 10):
            print("Wrong arguments")
    else:
            SQLp2z = "SELECT Zcor FROM Points WHERE Xcor = {x3} AND Ycor = {y3}".format(x3=x3, y3=y3)
            for row in cursor.execute(SQLp2z):
                z3 = row.Zcor
                p3 = Point(x3, y3, z3)
            print (p3.x, p3.y, p3.z)
    x4 = p.x
    y4 = p.y - 1
    z4 = 0
    p4 = Point()
    if (x4 <= 0 and x4 > 10 or y4 <= 0 and y4 > 10):
            print("Wrong arguments")
    else:
            SQLp4z = "SELECT Zcor FROM Points WHERE Xcor = {x4} AND Ycor = {y4}".format(x4=x4, y4=y4)
            for row in cursor.execute(SQLp4z):
                z4 = row.Zcor
                p4 = Point(x4, y4, z4)
            print (p4.x, p4.y, p4.z)
    x5 = p.x
    y5 = p.y + 1
    z5 = 0
    p5 = Point()
    if (x5 <= 0 and x5 > 10 or y5 <= 0 and y5 > 10):
            print("Wrong arguments")
    else:
            SQLp5z = "SELECT Zcor FROM Points WHERE Xcor = {x5} AND Ycor = {y5}".format(x5=x5, y5=y5)
            for row in cursor.execute(SQLp5z):
                z5 = row.Zcor
                p5 = Point(x5, y5, z5)
            print (p5.x, p5.y, p5.z)
    x6 = p.x + 1
    y6 = p.y - 1
    z6 = 0
    p6 = Point()
    if (x6 <= 0 and x6 > 10 or y6 <= 0 and y6 > 10):
            print("Wrong arguments")
    else:
            SQLp6z = "SELECT Zcor FROM Points WHERE Xcor = {x6} AND Ycor = {y6}".format(x6=x6, y6=y6)
            for row in cursor.execute(SQLp6z):
                z6 = row.Zcor
                p6 = Point(x6, y6, z6)
            print (p6.x, p6.y, p6.z)
    x7 = p.x - 1
    y7 = p.y
    z7 = 0
    p7 = Point()
    if (x7 <= 0 and x7 > 10 or y7 <= 0 and y7 > 10):
            print("Wrong arguments")
    else:
            SQLp7z = "SELECT Zcor FROM Points WHERE Xcor = {x7} AND Ycor = {y7}".format(x7=x7, y7=y7)
            for row in cursor.execute(SQLp7z):
                z7 = row.Zcor
                p7 = Point(x7, y7, z7)
            print (p7.x, p7.y, p7.z)
    x8 = p.x + 1
    y8 = p.y + 1
    z8 = 0
    p8 = Point()
    if (x8 <= 0 and x8 > 10 or y8 <= 0 and y8 > 10):
            print("Wrong arguments")
    else:
            SQLp8z = "SELECT Zcor FROM Points WHERE Xcor = {x8} AND Ycor = {y8}".format(x8=x8, y8=y8)
            for row in cursor.execute(SQLp8z):
                z8 = row.Zcor
                p8 = Point(x8, y8, z8)
            print (p8.x, p8.y, p8.z)
    plist = [p1, p2, p3, p4, p5, p6, p7, p8]
    dif = [abs(p.z - p1.z), abs(p.z - p2.z), abs(p.z - p3.z), abs(p.z - p4.z), abs(p.z - p5.z), abs(p.z - p6.z),
               abs(p.z - p7.z), abs(p.z - p8.z)]
    print(dif)
    for i in xrange(len(dif)):
            a = min(dif)
            b = dif.index(a)
    print(a, b)
    pNew = plist[b]
    print (pNew.x, pNew.y, pNew.z)
    xn = pNew.x
    yn = pNew.y
    zn = pNew.z
    cursor.execute(
            "UPDATE Points SET SLValue = 1 WHERE Xcor = {xn} AND Ycor = {yn} AND Zcor = {zn}".format(xn=xn, yn=yn, zn=zn))
    cnxn.commit()
    p = (pNew.x, pNew.y, pNew.z)
    i += 1

Вот такой error.
line 26, in <module>
x1 = p.x - 1
AttributeError: ‘tuple’ object has no attribute ‘x’

Отредактировано Narek (Март 20, 2017 10:20:29)

Офлайн

#2 Март 20, 2017 10:40:00

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Python непонятная ошибка

Сделайте перед этой строкой

 print(p)

и Вам все станет ясно…

Офлайн

#3 Март 20, 2017 11:08:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2825
Репутация: +  185  -
Профиль   Отправить e-mail  

Python непонятная ошибка

 p = (pNew.x, pNew.y, pNew.z)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#4 Март 20, 2017 11:14:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9995
Репутация: +  857  -
Профиль   Отправить e-mail  

Python непонятная ошибка

Narek
AttributeError: ‘tuple’ object has no attribute ‘x’
В p находится кортеж, а не число.

Narek
У меня небольшой скрипт
Куча ошибок, дальше будет то же самое.

Narek
 if (x3 <= 0 and x3 > 10 or y3 <= 0 and y3 > 10):
Отдай эту задачу программисту. x3 не может быть меньше нуля и больше десяти одновременно.



Отредактировано py.user.next (Март 20, 2017 11:15:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version