Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290

Обработка исключений списка

19.08.2021, 08:42. Показов 1216. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро форумчане. Вопрос про извлечение значений из списка.
Допустим у меня есть динамический список например 5 элементов,иногда он может содержать 6 или 7 элементов. просто громоздко выходит,может быть так что и условий куча будет либо попытки с исключением. Как грамотно извлекать данные из списка чтобы не было ошибок при извлечении. не знаем сколько элементов,но знаем минимум например 5 элементов обязательных,а остальные по возможности и максимум например не больше 10 элементов будет.

Для примера:
Python
1
2
3
4
sp = [1,2,3,4,5]
print(sp[2]) #Все ок
print(sp[5]) #Ошибка
print(sp[6]) #ошибка
То есть на ошибке программа вылетит.

Изначально добавлял условия,не красиво выходит писать несколько условий.
Python
1
2
3
4
5
6
7
8
9
10
sp = [1,2,3,4,5]
if len(sp) == 5:
  q1 = sp[5]
  print(q)
elif 1:
  q1 = 0
if len(sp) == 6:
  q2=sp[6]
  print(q2)
...
Или лучше делать через исключения? Тоже некрасиво писать несколько попыток.
Python
1
2
3
4
5
6
7
8
9
10
try:
   q1=sp[5]
   print(q)
except:
  q1=0
 
try:
   q2=sp[6]
except:
   q2=0

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

То есть вот так наверно лучше будет
Python
1
2
3
4
5
if len(sp) < 10:
   for i in range(len(sp)+1,10):
       sp.append('')
#И затем уже читаем не боясь ошибки
print(sp[7])
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2021, 08:42
Ответы с готовыми решениями:

Обработка исключений
Всем добрый день помогите выполнить обработку исключений. Нужно добавить обработку исключений в классы Date и DateTime из ДЗ #20. Для...

Обработка исключений
Здравствуйте, вопрос простой, но в питоне я 0. Есть скрипт для импорта моделей в blender: import os import bpy path_to_obj_dir...

Обработка исключений
Добрый вечер ! Написал функцию которая возвращает True если число простое и False если наоборот Нужно добавить исключения number - любой...

10
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2021, 09:09
XY Problem in action

Добавлено через 1 минуту
Сергей225, расскажи изначальную задачу и ситуации в которых может произойти сие непотребство. Ты явно что-то не то делаешь.
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
19.08.2021, 09:19  [ТС]
iSmokeJC, Да по любому не то,точнее не правильно продумано))) просто когда изначально делал проект,не задумывался как и в чем хранить данные для передачи через фтп. В текстовый файл данные отправляются на фтп в виде строки разделенной на табуляцию, при получении(чтении) раскладываю в список и вытаскиваю значения. Теперь то понял что дерьмо было сделано когда понадобилось добавить новые данные при передаче или изменению,программа же не знает сколько элементов в списке после разложения из строки и уверен рано или поздно ошибка возникнет если будет не сходиться,вот и решил как то временно доработать на случай чтобы жестких ошибок не было с вылетом программы. А потом когда время будет то переделаю может полностью этот момент.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2021, 09:26
Сергей225, а зачем обращаться к данным жестко по индексу? Вот в чем вопрос.

Добавлено через 3 минуты
Даже если тебе нужен последний элемент например. Не зная длины списка всегда можно указать индекс [-1]
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
19.08.2021, 09:32  [ТС]
iSmokeJC, Потому что стоит тот порядок в котором лежат данные. Например извлечь дату то лежит в [4] и так далее.

Добавлено через 2 минуты
iSmokeJC, Просто если использую -1 то это что за данные будут номер или дата? вот поэтому и проставил жестко по индексу чтобы знать где какие данные лежат.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2021, 09:34
Так если порядок, равно как и количество элементов, нарушится - прога упадет в любом случае.

Добавлено через 2 минуты
Сергей225, вот ради смеха - приведи кусок кода, который парсит эти данные. И два куска данных - обычный и хм, необычный.
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
19.08.2021, 09:36  [ТС]
iSmokeJC, Вот я и хочу предостеречь если попытаюсь прочитать не существующий элемент по индексу. Скорее всего пока сделаю как и написал в последнем примере,если меньше определенного количества элементов в списке то забить пустыми в список,чтобы при попытке прочитать не упало ничего.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2021, 09:37
Сергей225, покажи код который есть сейчас.
То, что ты хочешь сделать - лютый костылище.
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
19.08.2021, 09:41  [ТС]
iSmokeJC, Да вот допустим. Первые 8 символов знаю обязательно есть. Дальше когда пришлось добавить новые данные,но чтобы на случай были совместимы со старыми версиями и писал условия.Затем еще сейчас нужен добавить 10 элемент то вот и понял что головная боль будет,если так оставить дальше. Вот и подумал что может ограничить и сделать например максимум 15 элементов,но на деле нужны 10 например,Чтобы когда обновлять не писать дополнительные условия а прописать только чтение по какому то индексу.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
tek_str = line.rstrip('\n')     #Уберем \n на концах строки
sp = tek_str.split('\t')        #Разбивка строк в список
                    
regp    = sp[0].strip().replace(" ","")
nnmt    = sp[1].strip().replace(" ","")                                
nser    = sp[2].strip().replace(" ","").replace('\"','')
anal    = sp[3].strip().replace(" ","")
qr_kod  = sp[4].strip().replace(" ","")
qr_scan = sp[5].strip()
kychka  = sp[6].strip().replace(" ","")
key     = sp[7].strip().replace(" ","")        
                    
if  len(sp) > 8:
    data_vv = sp[8].strip().replace(" ","")
    if data_vv == '':
         data_vv = '0'
    elif 0: pass
##dt = sp[9].strip().replace(" ","")
##     if dt == '':
##          dt = '0'
##     elif 0: pass
   elif 1:                        
      data_vv = '0'
##  dt = '0'
elif 0: pass
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2021, 09:54

Да тут вся прога - лютый костылище. Тогда сорь, твой подход ничего уже не испортит, пиши как задумал.

Гг. Если будут доп.данные и ты в условии определяешь новые переменные, то далее в коде нужно и их проверять на валидность?
Я б по-человечески переписал, но хозяин-барин как говорится...
1
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
19.08.2021, 10:00  [ТС]
iSmokeJC, Хорошо. Да думаю так и напишу чтобы заполнились в списке пустые элементы. А на другой стороне тот кто отправляет,нужно переделать и по другому отправлять или даже скорее в другом формате.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2021, 10:00
Помогаю со студенческими работами здесь

Обработка исключений
Как можно обработать исключение? _tkinter.TclError: bad listbox index &quot;&quot;: must be active, anchor, end, @x,y, or a number try: ...

Обработка исключений
Здравствуйте. Есть код. def wcourse(fname): soup = BeautifulSoup(open(fname, encoding=&quot;utf8&quot;), &quot;lxml&quot;) for i in...

Обработка исключений
Здравствуйте. Нахожу названия по коду. Но этих исключений try except не хватает. def wcourse(fname): soup =...

Обработка исключений
Что то не выводит слово ydachno, когда ввожу число d=input('vvedite celoe cislo: ') try: d=int(d) print(ydachno) except: ...

Обработка исключений
Наткнулся на такой случай-не хочет читать данный код. Выдаёт syntaxError. Как этот обработчик работает?try: k=1/0 except...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru