首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效级别选择:从parser.log_levels中选择

无效级别选择:从parser.log_levels中选择
EN

Stack Overflow用户
提问于 2020-12-04 23:32:26
回答 1查看 115关注 0票数 0

我正在尝试使用一个开源Python程序。我有一个Python脚本,与安装了所有预reqs的示例完全相同,但我似乎得到了某种全局Python错误:

代码语言:javascript
复制
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的代码,发现:

代码语言:javascript
复制
 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上使用的。

我正在Debian 10上运行Python (而不是Python 3)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 23:45:51

这里的问题在于回溯中所建议的行:

代码语言:javascript
复制
msg = f"invalid level choice: {level} (choose from {parser.log_levels})"

这里的问题是,这一行是使用f-字符串,做字符串插值.这是一个问题的原因是直到python3.6才引入f-字符串。

不幸的是,因为这是来自eyed3的代码,所以您不能更改它。不过,你确实有几个选择:

  • 将您的python版本升级到至少3.6 (可能是最好的选择)
  • 对库进行分叉,并编辑该行,以便您可以将它与您版本的python一起使用。安装您的分叉版本。(这可能是个坏主意,这不太可能是唯一不相容的地方。您可能需要更新相当多。只更新您正在使用的python版本就更容易了)。

如果您查看开始部分的eyeD3回购,它说:

Python3.6是必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65152169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档