python - 接下来我应该阅读什么代码来确定 wx._core.PyAssertionError 的原因

标签 python python-2.7 wxpython wxwidgets

我们在使用 wxPython 加载文件时遇到了问题,用例是我们将这些文件/片段放在计算机上的文件夹中。片段是原始 html 文件的一小部分 - 很多时候片段是提取的表格,表格周围包含 html 和 body 标签

<html><body><table>
    ~tr and td tags with stuff in them
</table></body><<html>

用户使用 SmartBrowser(我们的应用程序)导航到该文件夹​​,然后该文件夹会列出该文件夹中的 htm 和 txt 文件并显示第一个文件。我们有控件可以在列表中移动(下一个和上一个)

该系统多年来一直运行良好,几乎没有出现任何故障。突然间,当加载某些片段时,SmartBrowser(允许查看片段的应用程序的名称)开始崩溃。我最终隔离了问题,确定发生了崩溃

  1. 如果文件有表格标签
  2. 如果表格中的任何 td 元素具有宽度属性 (WIDTH=)

如果我只是将宽度属性更改为一些无意义的单词(例如香蕉),那么一切都会正常显示,并且程序不会崩溃,但如果存在宽度属性,则运行尝试的命令控制台中会显示以下错误消息调试

你好,沃尔

Traceback (most recent call last):
  File "gui\smart_browser.pyo", line 286, in onOpen
  File "gui\smart_browser.pyo", line 219, in browseTo
  File "gui\smart_browser.pyo", line 170, in update
  File "gui\smart_browser.pyo", line 231, in loadUrl
  File "wx\html.pyo", line 1008, in LoadPage
wx._core.PyAssertionError: C++ assertion "(size_t)(n) <= length()" failed at ..\
..\include\wx/string.h(433) in wxStringBase::at(): invalid index in wxString

让我再次强调 - 这种行为最近才出现 - 我们已迁移到 WxPython 2.9,但回滚到 2.8,看看这是否是原因,但我们没有看到任何行为差异。

于是我在wx\html.py的错误信息中找到了该函数

def LoadPage(*args, **kwargs):
   """LoadPage(self, String location) -->bool"""
    return _html.HTMLWindow_LoadPage(*args, **kwargs)

但是我看到程序是从 _html 导入的,请原谅我,但现在看起来我有点不知所措,因为 _html 是一个 pyd 文件 -这似乎是一种dll

我不知道下一步该怎么做,因为我无法弄清楚为什么 WIDTH 属性会导致我在 WxWidgets 网站上浏览的错误,而且我似乎找不到任何证据表明这种组合将会是一个问题。我不确定接下来应该看什么。

具体来说,我正在寻找有关我需要阅读哪些内容来解决此问题的建议,并且可能表明我们应该在 Wx 之外处理此问题或进入 Wx对于像我这样有技能的人来说,这似乎很可怕。

好吧,我将根据 Mike Driscoll 的回答添加更多内容,代码确实有这个

try:
    from wx.lib.iewin import IEHtmlWindow as HtmlWindow
    LOAD_URL_FUNC_NAME = 'LoadUrl'
    GET_URL_PROPERTY_NAME = "locationurl"
except:
    from wx.html import HtmlWindow
    LOAD_URL_FUNC_NAME = 'LoadPage'
    GET_URL_PROPERTY_NAME = "OpenedPage"

他是完全正确的,我注释掉了条件导入,经过更多研究后确定我需要

from wx.lib.iewin_old import IEHtmlWindow as HtmlWindow

注意iewin_old,我以为我们正在使用IEHtmlWindow,但我们没有使用IEHtmlWindow,因为当我转到iewin_old时解决了导入错误

最佳答案

我无法从您显示的一小段代码中确定,但我猜测您正在使用 HTMLWindow。 HTMLWindow 小部件仅适用于一组有限的 HTML 标记,因此我猜测它对该属性不满意。我怀疑你基本上有两个选择:

  • 在使用 lxml 或 beautifulsoup 之类的 wxPython 打开之前删除有问题的元素
  • 使用更强大的 HTML 小部件,例如 wx.html2 中的 webview

您还可以在 wxPython Google 群组/用户列表中询问其他建议。

关于python - 接下来我应该阅读什么代码来确定 wx._core.PyAssertionError 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937783/

相关文章:

python - 读取不同网页的内容,然后将其添加到另一个URL中

python - 为什么内置函数的__self__返回它所属的内置模块?

python - 如何从wxpython ListBox获取项目列表

python - wx grid SetCellBackGroundColor() 未按预期工作

python - 如何嵌入图像以与 wx.iconfrombitmap(wx.bitmap(path)) python 一起使用

python - numpy 按索引求和矩阵行

python - 使用装饰器创建类

python - Google App Engine,如何制作 native 文件对象?

python-2.7 - 无法安装PythonMagick Windows 7

macos - 导入错误 : No module named pymysql on Mac OS