Столкновение с недопустимым синтаксисом при использовании предлагаемого файла python

#python #syntax-error #bz2

#python #синтаксическая ошибка #bz2

Вопрос:

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

 import os
import xml.etree.ElementTree as ET
#A helpful function to load compressed or uncompressed XML files
def loadXMLFile("config.xml"):
    #Check if the file is compressed or not, and
    if (os.path.splitext("config.xml")[1][1:].strip() == "bz2"):
        import bz2
        f = bz2.BZ2File("output.bz2")
        doc = ET.parse(f)
        f.close()
        return doc
else:
        return ET.parse("config.xml")

#Load the XML file config.out.xml
XMLDoc=loadXMLFile("config.out.xml")

#We can create a list of all particle tags using an xpath expression
#(xpath expressions always return lists)
PtTags = XMLDoc.findall("//Pt")

#Print the number of particles
print len(PtTags)

#print the x, y, and z positions of each particle
for PtElement in PtTags:
    PosTag = PtElement.find("P")
    print PosTag.get("x"), PosTag.get("y"), PosTag.get("z"), PtElement.get("D")
  

Вот исходный файл, в котором есть «filename»

 #!/usr/bin/python
import os
import xml.etree.ElementTree as ET

#A helpful function to load compressed or uncompressed XML files
def loadXMLFile(filename):
    #Check if the file is compressed or not, and 
    if (os.path.splitext(filename)[1][1:].strip() == "bz2"):
        import bz2
        f = bz2.BZ2File(filename)
        doc = ET.parse(f)
        f.close()
        return doc
    else:
        return ET.parse(filename)

#Load the XML file config.out.xml
XMLDoc=loadXMLFile("config.out.xml")

#We can create a list of all particle tags using an xpath expression
#(xpath expressions always return lists)
PtTags = XMLDoc.findall("//Pt")

#Print the number of particles
print len(PtTags)

#print the x, y, and z positions of each particle
for PtElement in PtTags:
    PosTag = PtElement.find("P")
    print PosTag.get("x"), PosTag.get("y"), PosTag.get("z"), PtElement.get("D")
  

Я не знаю, в чем моя ошибка, с которой я сталкиваюсь с этой ошибкой? Есть ли какие-либо ошибки с каталогами? или, возможно, какие-то проблемы с именем файла?

Комментарии:

1. «синтаксическая ошибка» — какая синтаксическая ошибка? Если вы не опубликуете это, мы не сможем догадаться…

2. Вы используете Python 2 или Python 3? Ваши print инструкции будут работать только в Python 2.

3. loadXMLFile("config.xml") недопустимый синтаксис, как и ваше else: утверждение (из-за отсутствия отступов)

4. @Barmar Я использую python3… В чем разница между инструкцией print в Python 3 и Python 2? Что именно должно быть изменено?

5. В Python 3 print является функцией, ей нужны круглые скобки вокруг аргументов.

Ответ №1:

Вам не нужно вносить свои собственные правки. В примере кода filename является параметром функции и не должен быть изменен на строку. В строке, где это написано, XMLDoc=loadXMLFile("config.out.xml") функция открывает файл "config.out.xml" и использует is в качестве filename параметра.

Также есть проблемы с вашим оператором else, но это связано с тем, что вы изначально не редактировали функцию.

Попробуйте запустить исходный код без ваших правок и посмотрите, не появятся ли какие-либо ошибки.

https://www.pythoncentral.io/fun-with-python-function-parameters/

Комментарии:

1. Большое спасибо за вашу помощь. Проблема в том, что когда я оставляю «filename» без изменений и запускаю код, как вы сказали, без каких-либо изменений, я столкнулся с той же ошибкой. Я сделал снимок экрана, чтобы показать: photobox.co.uk/my/photo/full ? photo_id=501703268436

2. @AV Эта ссылка не работает, я просто вижу домашнюю страницу Photobox.