我正在编写一个Python / Tkinter文本编辑器,除其他外,它将运行Tkinter脚本。如果它们无法正常工作,它将在消息框中显示生成的错误消息。我的问题是,当子进程窗口关闭时,它还会显示带有“{}”的空白错误消息。有没有办法获得真正的错误消息,而不是空白消息?
以下是相关的代码行(tx是文本小部件,currentfile是脚本名称,子进程是作为sub导入的):
def runcode(*arg):
global tx, currentfile
saveit = "Code must be saved before it can be run"
if currentfile:
if tx.edit_modified():
file_save()
else:
messagebox.showinfo(message=saveit)
file_saveas()
# Catch error messages:
p = sub.Popen(currentfile, stderr=sub.PIPE)
errors = p.communicate()
# Strip out word "None" from beginning:
boobits = errors[1:]
if boobits:
messagebox.showerror(message=boobits)
答案 0 :(得分:1)
{}
是一个空字典,但(b'',)
是一个包含空字符串的单元素元组。所以你的测试可以
if boobits[0]:
更安全
if boobits and boobits[0]:
如果boobits
可能是一个空元组,但在这种情况下你可能不需要担心。
答案 1 :(得分:1)
虽然{}
可以表示一个空字典,就像问题建议的一些评论一样,但它也是Tcl如何表示列表中的空元素。 Tkinter只是围绕Tcl / tk解释器的思考包装。
实际发生的是你将一个元组传递给它需要一个字符串的对话框。此列表由Tkinter转换为tcl列表,然后窗口小部件正在创建tcl列表的字符串表示形式,即{}
(因为转换发生在Tcl解释器而不是python解释器中)
解决方案很简单:在将列表传递给对话框之前将其转换为字符串,或传入列表的第一个元素(例如:messagebox.showerror(message=boobits[0])