Python库中的语法错误,我该如何处理

0 投票
1 回答
1279 浏览
提问于 2025-04-18 10:55

我正在使用pyramid 1.5.1和python 3.2,最近在我的项目中添加了很多代码和几个库。

当我运行development.ini时,出现了下面的错误。

如果让我随便猜一下,我会说这个特定的库(看起来像是Markupsafe)可能和Python3不兼容……但项目页面似乎又说它是兼容的。问题是,我并没有直接调用这个库,而是它被另一个库使用,而替换这个库会非常困难。

我对Python编程还很陌生,想知道我在这种情况下有什么选择?或者说,调试的最佳方法是什么?

(finance-env)user1@finance1:/var/www/finance/corefinance/corefinance$ /var/www/finance/finance-env/bin/pserve /var/www/finance/corefinance/development.ini --reload
Starting subprocess with file monitor
Traceback (most recent call last):
  File "/var/www/finance/finance-env/bin/pserve", line 9, in <module>
    load_entry_point('pyramid==1.5.1', 'console_scripts', 'pserve')()
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/scripts/pserve.py", line 51, in main
    return command.run()
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/scripts/pserve.py", line 316, in run
    global_conf=vars)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/scripts/pserve.py", line 340, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
    return context.create()
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/paste/deploy/loadwsgi.py", line 710, in create
    return self.object_type.invoke(self)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/paste/deploy/loadwsgi.py", line 146, in invoke
    return fix_call(context.object, context.global_conf, **context.local_conf)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/paste/deploy/util.py", line 55, in fix_call
    val = callable(*args, **kw)
  File "/var/www/finance/corefinance/corefinance/__init__.py", line 35, in main
    session_factory=session_factory
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/config/__init__.py", line 301, in __init__
    exceptionresponse_view=exceptionresponse_view,
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/config/__init__.py", line 412, in setup_registry
    self.include(inc)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/config/__init__.py", line 755, in include
    c(configurator)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid_debugtoolbar-2.1-py3.2.egg/pyramid_debugtoolbar/__init__.py", line 113, in includeme
    config.include('pyramid_mako')
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/config/__init__.py", line 727, in include
    c = self.maybe_dotted(callable)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/config/__init__.py", line 825, in maybe_dotted
    return self.name_resolver.maybe_resolve(dotted)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/path.py", line 320, in maybe_resolve
    return self._resolve(dotted, package)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/path.py", line 327, in _resolve
    return self._zope_dottedname_style(dotted, package)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid/path.py", line 370, in _zope_dottedname_style
    found = __import__(used)
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/pyramid_mako-1.0.2-py3.2.egg/pyramid_mako/__init__.py", line 18, in <module>
    from mako.lookup import TemplateLookup
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/Mako-1.0.0-py3.2.egg/mako/lookup.py", line 9, in <module>
    from mako.template import Template
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/Mako-1.0.0-py3.2.egg/mako/template.py", line 10, in <module>
    from mako.lexer import Lexer
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/Mako-1.0.0-py3.2.egg/mako/lexer.py", line 11, in <module>
    from mako import parsetree, exceptions, compat
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/Mako-1.0.0-py3.2.egg/mako/parsetree.py", line 9, in <module>
    from mako import exceptions, ast, util, filters, compat
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/Mako-1.0.0-py3.2.egg/mako/filters.py", line 38, in <module>
    import markupsafe
  File "/var/www/finance/finance-env/lib/python3.2/site-packages/MarkupSafe-0.23-py3.2-linux-x86_64.egg/markupsafe/__init__.py", line 70
    def __new__(cls, base=u'', encoding=None, errors='strict'):
                            ^
SyntaxError: invalid syntax

1 个回答

4

MarkupSafe这个包只能在Python 3.3及以上版本中使用。从0.16版本开始,不再支持Python 3.2。

u'unicode'这种写法是在PEP 414中引入的,目的是为了让开发库代码时,能够同时支持Python 2和3,使用起来更方便。

要么把你的Python升级到3.3(甚至3.4),要么把MarkupSafe降级到0.15,这是最后一个支持Python 3.2的版本。

我看到Mako在使用Python 3.2时去掉了MarkupSafe的依赖;如果没有其他东西依赖它,可能可以直接把这个包删掉。mako.filter的源代码如果没有安装这个包,肯定会退回到本地的实现。

撰写回答