#python
#python
Вопрос:
Я пытаюсь использовать программу Python с открытым исходным кодом. У меня есть скрипт Python, настроенный точно в соответствии с примером, со всеми установленными предварительными запросами, но, похоже, я получаю какую-то глобальную ошибку Python:
Traceback (most recent call last):
File "/etc/asterisk/scripts/detect/gong/gonglearn.py", line 15, in <module>
from pyAudioAnalysis.audioTrainTest import extract_features_and_train
File "/root/pyAudioAnalysis/pyAudioAnalysis/audioTrainTest.py", line 9, in <module>
from pyAudioAnalysis import MidTermFeatures as aF
File "/root/pyAudioAnalysis/pyAudioAnalysis/MidTermFeatures.py", line 8, in <module>
from pyAudioAnalysis import audioBasicIO
File "/root/pyAudioAnalysis/pyAudioAnalysis/audioBasicIO.py", line 6, in <module>
import eyed3
File "/usr/local/lib/python2.7/dist-packages/eyed3/__init__.py", line 31, in <module>
from .utils.log import log # noqa: E402
File "/usr/local/lib/python2.7/dist-packages/eyed3/utils/__init__.py", line 361
msg = f"invalid level choice: {level} (choose from {parser.log_levels})"
SyntaxError: invalid syntax
Я пошел посмотреть код __init__.py
и нашел:
def __call__(self, parser, namespace, values, option_string=None):
values = values.split(':')
level, logger = values if len(values) > 1 else (values[0],
self.main_logger)
logger = logging.getLogger(logger)
try:
logger.setLevel(logging._nameToLevel[level.upper()])
except KeyError:
msg = f"invalid level choice: {level} (choose from {parser.log_levels})"
raise argparse.ArgumentError(self, msg)
super(LoggingAction, self).__call__(parser, namespace, values, option_string)
Поскольку это, по-видимому, системный код или что-то с eyed3, не относящееся к тому, что я пытаюсь запустить, я не совсем уверен, как поступить. Я нигде не могу найти никаких ссылок на то, как отлаживать эту конкретную ошибку.
О какой именно проблеме это говорит? Обычно я могу самостоятельно устранять синтаксические ошибки, но в этом случае сообщение кажется немного загадочным, и я не могу его расшифровать. Я пытался импортировать различные другие вещи в свой скрипт и делать import logging as log
, но ни один из них не помог. Должен ли я каким-то образом настроить ведение журнала в Python, прежде чем я смогу его использовать?
Я прошу прощения, если это странная проблема, но она кажется довольно неясной, и прошло некоторое время с тех пор, как я использовал Python раньше, и это было в Windows.
Я использую Python (не Python 3) в Debian 10.
Ответ №1:
Проблема здесь в строке, предложенной в трассировке:
msg = f"invalid level choice: {level} (choose from {parser.log_levels})"
Проблема здесь в том, что в этой строке используются f-строки для интерполяции строк. Причина, по которой это проблема, заключается в том, что f-строки не были введены до python 3.6.
К сожалению, поскольку это код из eyed3
, вы не можете его изменить. Однако у вас есть несколько вариантов:
- Обновите свою версию python как минимум до 3.6 (вероятно, лучший вариант)
- разветвляйте библиотеку и отредактируйте эту строку, чтобы вы могли использовать ее с вашей версией python. Установите свою раздвоенную версию. (Вероятно, это плохая идея, вряд ли это единственное место, где есть несовместимости. Вероятно, вам придется довольно много обновлять. Будет проще просто обновить версию python, которую вы используете).
Если вы посмотрите на раздел «Начало работы» репозитория eyeD3, в нем говорится:
Требуется Python> = 3.6.