Попытка получить аргументы командной строки для работы с моим кодом, но возникает ошибка - TypeError: объект «NoneType» не может быть вызван

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

tree.find("./PLANT/[COMMON='%s'" % sys.argv[3]):

Вот весь мой код:

import os
import xml.etree.ElementTree as ET
import sys

# changes to the correct directory of each different environment
os.chdir(os.path.expanduser('~/Desktop'))

file = "plant_catalog.xml"
tree = ET.parse(file)

# Finds section by plant name and adjusts the price according to argument
 for plant in tree.find("./PLANT/[COMMON='%s'" % sys.argv[3]):
    if plant.tag == "PRICE":
        plant.text = float(plant.text) * sys.argv[4]
        plant.text = str(plant.text)
    print(plant.text)

tree.write("plant_catalog.xml")

Вот вылетающие ошибки:

Трассировка (последний последний вызов): файл «C:/Users/cader/PycharmProjects/ModifyML/ModifyML.py», строка 14, для завода в дереве. найдите (имя): файл «C:\Users\cader\AppData». \Local\Programs\Python\Python37\lib\xml\etree\ElementTree.py", строка 653, в поиске return self._root.find(path, namespaces) File "C:\Users\cader\AppData\Local\Programs \Python\Python37\lib\xml\etree\ElementPath.py", строка 307, в find return next(iterfind(elem, path, namespaces), None) File "C:\Users\cader\AppData\Local\Programs\ Python\Python37\lib\xml\etree\ElementPath.py", строка 300, результат iterfind = select(context, result) TypeError: объект "NoneType" не вызывается

Процесс завершен с кодом выхода 1

Мне очень жаль, если это плохо отформатировано, я создал учетную запись только для того, чтобы задать этот вопрос.


person Sheerluck    schedule 06.12.2018    source источник


Ответы (1)


У меня сложилось впечатление, что результатом ET.parse(file) является нулевой указатель (результата нет).

Я бы посоветовал вам проверить эту функцию parse(). Если у вас есть проблемы, вы можете отредактировать свой вопрос и добавить исходный код этой функции.

person Dominique    schedule 06.12.2018
comment
Хотя я не совсем понимаю, что ET.parse(file) делает для меня, его удаление приводит к тому, что он не работает в моем коде, который работает. Мне удалось заставить мой код работать, изменив sys.argv[4] на float(sys.argv[4]) и поняв, что мне не хватает скобки. - person Sheerluck; 11.12.2018