我们在使用 wxPython 加载文件时遇到问题,用例是我们在计算机上的文件夹中有这些文件/片段。snips 是原始 html 文件的一小部分 - 很多时候,snips 是一个提取的表格,表格周围有 html 和 body 标签
<html><body><table>
~tr and td tags with stuff in them
</table></body><<html>
用户使用 SmartBrowser(我们的应用程序)导航到文件夹,然后列出文件夹中的 htm 和 txt 文件并显示第一个。我们有控制在列表中移动(下一个和上一个)
几年来,该系统运行良好,几乎没有故障。突然之间,SmartBrowser(允许查看片段的应用程序的名称)在加载某些片段时开始崩溃。我终于隔离了问题以确定崩溃正在发生
- 如果文件有表标签
- 如果表中的任何 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 但我们不是因为在我去iewin_old时解决的导入错误