некоторые проблемы с диапазоном индекса python студенческий проект - PullRequest
0 голосов
/ 02 марта 2020
def f3():

    root.withdraw()
    viewest.deiconify()
    #import cx_Oracle
    con=None
    cursor=None
    try:
        con=cx_Oracle.connect("system/abc123")
        cursor=con.cursor()
        sql="select * from students"
        cursor.execute(sql) 
        msg=""
        for d in data:
            msg=msg+" R: "+ str(d[0]) + " N: " + str(d[1])+" M: " + str(d[2])+ "\n"
            stData.insert(INSERT,msg)
    except cx_Oracle.DatabaseError as e:
        print("some issues",e)

    finally:
        if cursor is not None:
            cursor.close()
        if con is not None:
            con.close()
            print("Disconnected")

'' 'IndexError: строковый индекс вне диапазона, msg = msg + "R:" + str (d [0]) + "N:" + str (d [1]) + "M:" + str (d [2]) + "\ n" '' '

1 Ответ

0 голосов
/ 02 марта 2020

Трудно сказать, что вы пытаетесь сделать здесь, но какой тип данных data? Похоже, вы не справляетесь с оператором try (хорошее использование try / кроме обработки исключений!), Поэтому я думаю, что проблема заключается в том, как вы индексируете элементы (d) в data. Подумайте об этом: если data не существует (то есть вы не инициализировали его в своем коде для использования вашей программой), как вы можете попытаться проиндексировать его позже? Кроме того, странно, что вы не получаете NameError, поскольку я не вижу, чтобы data был определен нигде, если вы не обрезали то, что было определено ранее (если мои глаза не обманули меня).

Общие принципы программирования:

  • Итерируемые объекты: String, List, Dictionary и др. c ...
  • Не повторяемые объекты : Integer, Float, Boolean, et c ... (в зависимости от языка программирования)

Итерируемые типы данных - это те, которые можно индексировать с помощью скобочных обозначений ([]) так что в любом случае вам нужно знать типы ваших переменных, а затем использовать правильные «процессы» для работы с ними. Поскольку вы индексируете элементы в data, тип данных data, следовательно, также должен быть итеративным.

В общем, IndexError означает, что вы пытались получить доступ / индексировать элемент в списке, например, но этот элемент не существует. Поэтому я думаю, что попытка создать строку И проиндексировать элемент в несуществующем объекте приводит к этой ошибке.

Вот что, я думаю, поможет:

Если бы я мог видеть, где вы определили data, я мог бы сказать вам, где вы можете пойти не так, но сейчас я могу только порекомендовать вам вернуться и посмотреть, проиндексировали ли вы элемент в d в data, который не существует.

Пример (я предполагаю, data - это список для ясности):

>>> data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> data[0] # index a list in d in data
[1, 2, 3]
>>> data[0][1]
2

# If you try to access an index in data that doesn't exist:
>>> data[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Я, вероятно, переобъяснил, так что я просто закончу это здесь. Вышеприведенная реализация должна была дать вам представление о том, как правильно получить доступ к списку в списке и когда это не сделано должным образом, что может произойти. Надеюсь, это понятно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...