ValueError, элемент отсутствует в списке кортежей - PullRequest
0 голосов
/ 06 марта 2020

Контекст: Я подключаюсь к SQL Серверу через Pyodb c, чтобы запросить имена существующих хранимых процедур в базе данных. После подключения следующий код выполняется и возвращает список кортежей следующим образом:

  proc_name = 'load_activityid_report'

  costpoint_connection.autocommit = True

  query_existing_procs = "SELECT specific_name FROM costpoint_sandbox.INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE'"
  costpoint_connection_cursor.execute(query_existing_procs)

  procs = costpoint_connection_cursor.fetchall()

  print(type(procs))
  print(procs)

Вот вывод:

<class 'list'>
[('parse_xml_lot_info', ), ('parse_xml_reqid_status_data', ), ('load_item_request_report', ), ('load_project_timecard_hours', ), ('load_activity_ids_masterlist_report', ), ('load_po_masterlist_report', ), ('load_project_descriptions_report', ), ('load_activityid_report', )]

Будучи новичком в Python Я пытаюсь найти список кортежей для элемента load_activityid_report (который явно существует) с последующим добавлением его в список, созданием кортежа из этого списка и использованием метода Index () для поиска в список выше для элемента кортежа:

  #Convert proc_name to list then to tuple
  proc_name_list = []
  proc_name_list.append(proc_name)
  proc_name_tuple = tuple(proc_name_list)
  print(proc_name_tuple)

вывод:

('load_activityid_report',)

Вопрос: Если приведенный выше вывод ясно показывает, что кортеж создан с элементом это соответствует почему, когда я выполняю метод Index () , я поднимаю ошибку ниже:

procs.index(proc_name_tuple)

ValueError: ('load_activityid_report',) не находится в список

1 Ответ

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

Попробуйте преобразовать процы из списка кортежей в списка строк

[''.join(i) for i in procs]

и из получите индекс load_po_masterlist_report

proc_name = "load_po_masterlist_report"
[''.join(i) for i in procs].index(proc_name))

Код:

procs = [('parse_xml_lot_info', ), ('parse_xml_reqid_status_data', ), ('load_item_request_report', ), ('load_project_timecard_hours', ), ('load_activity_ids_masterlist_report', ), ('load_po_masterlist_report', ), ('load_project_descriptions_report', ), ('load_activityid_report', )]

proc_name = "load_po_masterlist_report"

print([''.join(i) for i in procs].index(proc_name))

Вывод:

>>5

или вы можете попробовать это:

procs = [('parse_xml_lot_info', ), ('parse_xml_reqid_status_data', ), ('load_item_request_report', ), ('load_project_timecard_hours', ), ('load_activity_ids_masterlist_report', ), ('load_po_masterlist_report', ), ('load_project_descriptions_report', ), ('load_activityid_report', )]
tup = ('load_activityid_report',)

for index, value in enumerate(procs):
    if value == tup:
        print(index, value)

Выход:

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