Python格式警告与跨包错误

0 投票
1 回答
1033 浏览
提问于 2025-04-18 18:51

好吧,我有点困惑。我正在使用两个Python库——PyPDF2和SQLAlchemy。SQLAlchemy发出了一个警告,使用的是Python的warning.warn(),而且不知怎么的,它还调用了PyPDF2中的一个formatWarning()函数,这个函数也使用了Python的warning.warn()。

这到底是SQLAlchemy的问题还是PyPDF2的问题呢?

这到底是怎么发生的——formatWarning是个特别的函数吗?

PyPDF2是这样定义的:

#custom implementation of warnings.formatwarning
def formatWarning(message, category, filename, lineno, line=None):
    file = filename.replace("/", "\\").rsplit("\\", 1)[1] # find the file name
    return "%s: %s [%s:%s]\n" % (category.__name__, message, file, lineno)

我的错误堆栈是:

  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.7-py2.7-linux-x86_64.egg/sqlalchemy/orm/strategies.py", line 613, in _emit_lazyload
    % self.parent_property)

  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.7-py2.7-linux-x86_64.egg/sqlalchemy/util/langhelpers.py", line 1205, in warn
    warnings.warn(msg, exc.SAWarning, stacklevel=stacklevel)

  File "/usr/local/lib/python2.7/dist-packages/PyPDF2/pdf.py", line 817, in _showwarning
    file.write(formatWarning(message, category, filename, lineno, line))

  File "/usr/local/lib/python2.7/dist-packages/PyPDF2/utils.py", line 59, in formatWarning
    file = filename.replace("/", "\\").rsplit("\\", 1)[1] # find the file name

  IndexError: list index out of range

1 个回答

1

看起来这是一个旧的错误,出现在PyPDF2这个软件包里,它把python的 utils._formatwarning 给覆盖掉了:

warnings.formatwarning = utils._formatwarning

最近的版本似乎已经修复了这个问题,更新到最新版本就解决了这个问题。

撰写回答