#python
Вопрос:
Это мой код:
while True:
print("Type 'done' to finish receipts")
code=input("Enter item code to add:")
items =open("items.txt")
quant=input("Quantity:")
details = items.read()
detailslist = details.split("n")
for a in detailslist:
fire = a.split("#")
print (fire)
b = fire[0]
c = fire[1]
d = fire[2]
dictd = {}
dictd[b] = c ' ' ' Quantity: ' ' ' quant ' ' 'Price:' d
print (dictd)
Это в items.txt:
A# Almanac2018# 18.30
B# Almanac2020# 23.80
C# Almanac2021# 16.54
D# Almanac2022# 22.25
Я получаю эту ошибку:
Type 'done' to finish receipts
Enter item code to add:A
Quantity:45
['A', ' Almanac2018', ' 18.30']
{'A': ' Almanac2018 Quantity: 45 Price: 18.30'}
['B', ' Almanac2020', ' 23.80']
{'B': ' Almanac2020 Quantity: 45 Price: 23.80'}
['C', ' Almanac2021', ' 16.54']
{'C': ' Almanac2021 Quantity: 45 Price: 16.54'}
['D', ' Almanac2022', ' 22.25']
{'D': ' Almanac2022 Quantity: 45 Price: 22.25'}
['']
Traceback (most recent call last):
File "receipt.py", line 12, in <module>
c = fire[1]
IndexError: list index out of range
Я пытаюсь создать программу, которая будет получать товары, поэтому, если бы вы могли предоставить какой-либо код, который был бы полезен.
Любая помощь будет признательна.
Комментарии:
1. Ну, я думаю, в твоем items.txt, там может быть несколько пустых строк. Попробуйте удалить его и сделайте. В противном случае просто оберните код вокруг блоков try и except, а в блоке except просто продолжайте.
2. В файле есть пустые строки в качестве
print(fire)
отпечатков['']
, а такжеfire
список только с одним элементом, вы получаете сообщение об ошибке дляfire[1]
3. Последняя строка(ы) в файле является/являются пустой (- ами).
Ответ №1:
Проблема, с которой вы столкнулись в своем коде, связана с пустыми строками в вашем items.txt
файле. Когда есть пустая строка, fire
будет решено ['']
, что это список только из 1 элемента, поэтому при попытке запуска кода вы получите сообщение об ошибке c = fire[1]
. Вы можете добавить проверку, чтобы узнать, пустая это строка или нет:
for a in detailslist:
fire = a.split("#")
if len(fire) > 1:
print (fire)
b = fire[0]
c = fire[1]
d = fire[2]
dictd = {}
dictd[b] = c ' ' ' Quantity: ' ' ' quant ' ' 'Price:' d
print (dictd)
Комментарии:
1. я проверил, и в нем нет пустых строк items.txt
2. Возможно, в конце файла появится новая строка
Ответ №2:
Дайте человеку рыбу, накормите его на день… Научите человека ловить рыбу.
Так что это не рыба, а удочка (если вы используете Python версии v3.7 или выше).:
import pdb #Only need this if python < v3.7
while True:
print("Type 'done' to finish receipts")
code=input("Enter item code to add:")
items =open("items.txt")
quant=input("Quantity:")
details = items.read()
detailslist = details.split("n")
for a in detailslist:
fire = a.split("#")
print (fire)
try:
b = fire[0]
c = fire[1]
d = fire[2]
dictd = {}
dictd[b] = c ' ' ' Quantity: ' ' ' quant ' ' 'Price:' d
print (dictd)
except:
breakpoint() # if Python >= v3.7
pdb.set_trace() # if Python < v3.7
Это означает, что вы можете видеть точную форму и размер «огня», когда возникает ошибка. Это должно помочь вашим усилиям по отладке здесь — и в будущем, когда неизбежно возникнут другие проблемы.