Python 如何在运行tkinter文本小部件中的代码后不获取空错误消息

Python 如何在运行tkinter文本小部件中的代码后不获取空错误消息,python,tkinter,subprocess,messagebox,Python,Tkinter,Subprocess,Messagebox,我正在编写一个Python/Tkinter文本编辑器,它(除其他外)将运行Tkinter脚本。如果它们不能正常工作,它将在消息框中显示产生的错误消息。我的问题是,当子进程窗口关闭时,它还会显示一条带有“{}”的空白错误消息。有没有办法得到真正的错误消息而不是空白消息? 以下是相关的代码行(tx是文本小部件,currentfile是脚本名,subprocess作为sub导入): {}是一个空的dict,但是(b'',)是一个包含空字符串的单元素元组。所以你的测试可以 if boobits[0]:

我正在编写一个Python/Tkinter文本编辑器,它(除其他外)将运行Tkinter脚本。如果它们不能正常工作,它将在消息框中显示产生的错误消息。我的问题是,当子进程窗口关闭时,它还会显示一条带有“{}”的空白错误消息。有没有办法得到真正的错误消息而不是空白消息?

以下是相关的代码行(tx是文本小部件,currentfile是脚本名,subprocess作为sub导入):


{}
是一个空的dict,但是
(b'',)
是一个包含空字符串的单元素元组。所以你的测试可以

if boobits[0]:
这样做更安全

if boobits and boobits[0]:

如果
boobits
可能是一个空元组,但在这种情况下您可能不需要担心。

{}
是一个空dict,但是
(b'',)
是一个包含空字符串的单元素元组。所以你的测试可以

if boobits[0]:
这样做更安全

if boobits and boobits[0]:

如果
boobits
可能是一个空元组,但在这种情况下,您可能不需要担心。

虽然
{}
可以表示一个空字典,就像对问题的一些注释所建议的那样,但Tcl也是如何表示列表中的空元素的。Tkinter只是Tcl/tk解释器的一个思想包装器

实际发生的情况是,您正在向对话框传递一个元组,该对话框需要一个字符串。Tkinter将此列表转换为tcl列表,然后小部件将创建tcl列表的字符串表示形式,即
{}
(因为转换发生在tcl解释器而不是python解释器中)


解决方案很简单:在将列表传递到对话框之前将其转换为字符串,或者传入列表的第一个元素(例如:
messagebox.bathror(message=boobits[0])
{}
可以表示一个空字典,就像问题的一些注释所建议的那样,这也是Tcl如何表示列表中的空元素。Tkinter只是Tcl/tk解释器的一个思维包装器

实际发生的情况是,您正在将一个元组传递给对话框,该对话框需要一个字符串。Tkinter正在将该列表转换为tcl列表,然后小部件正在创建tcl列表的字符串表示形式,即
{}
(因为转换发生在tcl解释器而不是python解释器中)


解决方案很简单:在将列表传递到对话框之前将其转换为字符串,或者传入列表的第一个元素(例如:
messagebox.bathror(message=boobits[0])

boobits看起来像什么?例如,当我在脚本中放入“def”后没有任何内容来引发错误消息:
code
{File“/home /davIDMC /计算/ python /tTestTest.py',行117OK,但在那种情况下,<代码> BoBITS < /代码>包含什么?因为它不是A,我们不能运行您的代码来找出我们自己。当子进程窗口关闭时,显示的空白错误消息(即,BoBIT)是{}。当我把它转换成字符串时,它看起来是这样的:(b),()抱歉,我不能给出一个最小的、完整的、可验证的示例(至少现在是这样),但这需要在文本窗口小部件中放入一个完整的脚本来获取错误消息,而这又似乎涉及到许多与我的问题无关的代码!当代码中出现实际错误时,boobits(即“stderr”)输出减去单词“None”(无)后会用大括号显示。这很奇怪。
{}
是一个空的
dict
,但是
(b“”,)
是一个包含空字符串的单元素元组。但是,
(b“”,)
包含一个未终止的字符串常量;希望这只是一个输入错误,而您真正的意思是
(b“”,)
。如果是这样的话,你可以测试
如果boobits和boobits[0]:
,或者只测试
如果boobits[0]:
boobits是什么样子的?例如,当我在脚本中添加“def”时,后面没有任何内容会引发错误消息:
code
{File”/home/davidmc/Computing/python/textest.py“行117OK,但在那种情况下,<代码> BoBITS 包含什么?我们不能运行您的代码来查找我们自己,因为它不是A。当子进程窗口关闭时,显示的空白错误消息(即,BoBIT)是{}。当我把它转换成字符串时,它看起来是这样的:(b),)抱歉,我不能给出一个最小的、完整的、可验证的示例(至少现在是这样),但这需要在文本窗口小部件中放入一个完整的脚本来获取错误消息,而这又似乎涉及到许多与我的问题无关的代码!当代码中出现实际错误时,boobits(即“stderr”)“output减去单词“None”)显示时会用大括号括起来。这很奇怪。
{}
是一个空的
dict
,但是
(b“”,)
是一个包含空字符串的单元素元组。然而,
(b“”,)
包含一个未终止的字符串常量;希望这只是一个输入错误,而您真正的意思是
(b“”,)
。如果是这样的话,你可以测试
如果boobits和boobits[0]:
,或者只测试
如果boobits[0]:
我认为“实际上是一个元组,我不记得Tcl有过这个元组——但也许Tcl从Python中获取元组时会将它们视为列表。我确实尝试过将其转换为字符串,但我仍然得到了带有
(b'',)
的messagebox。但是带有
messagebox.bathror(message=boobits[0])
我再也没有收到不需要的空错误消息了。谢谢!啊!我想在做Tkinter工作时了解一下Tcl/tk会有所帮助。:)我认为“列表”实际上是一个元组,我不记得Tcl有过这个元组,但是当Tcl从Python获取元组时,它可能会将元组视为列表。我确实尝试过将其转换为字符串,但我仍然得到了带有
(b'',)