捕获丢失文件的Tkinter异常

时间:2018-08-26 17:01:19

标签: python tkinter file-io try-catch

我正在编写一个Tkinter程序,该程序会加载一些.png图像。

由于文件可能有故障或不存在,因此最好使用try-except块。我首先使用通用Python检查文件。然后,如果通过通用的Python try-except块,则将图像文件加载到Tkinter中:

ok = True
try:
    image_file = open("cat.png")
    image_file.close()
except IOError:
    ok = False

if ok:
    self.image = PhotoImage(file="cat.png")

这必须加载两次图像文件:一次用于Python检查,一次用于Tkinter。同样,不能保证Tkinter图像加载尝试将起作用。如果文件是通过网络到达的,则该文件可能可用于Python try-except调用,但随后突然不可用于Tkinter调用。

当我通过调用不可用的文件有意使程序崩溃时,我得到:

tkinter.TclError: couldn't open "fakefile.png": no such file or directory

这正是我试图在Tkinter中捕获的错误类型(找不到文件)。我已经四处寻找,但无法找到Tkinter尝试的方法,除了它自己的调用:PhotoImage(...)

如何安全地加载PNG?

1 个答案:

答案 0 :(得分:4)

您无需进行tkinter尝试-除了它自己的调用外;只需尝试-除外您对tkinter的呼叫:

try:
    self.image = PhotoImage(file="cat.png")
except tkinter.TclError:
    # do whatever you wanted to do instead

例如:

try:
    self.image = PhotoImage(file="cat.png")
except tkinter.TclError:
    self.cat = Label(text="Sorry I have no cat pictures")
else:
    self.cat = Label(image=self.image)