Python 捕获丢失文件的Tkinter异常

Python 捕获丢失文件的Tkinter异常,python,tkinter,file-io,try-catch,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

我正在编写一个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映像加载尝试能够正常工作。如果该文件是通过网络到达的,则该文件可能可用于pythontryexcept调用,但突然无法用于Tkinter调用

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

tkinter.TclError: couldn't open "fakefile.png": no such file or directory
这正是我试图在Tkinter内部捕获的错误类型(未找到文件)。我四处寻找,但除了Tkinter自己的调用:
PhotoImage(…)
,我找不到Tkinter可以尝试的方法


如何安全地加载PNG?

除了它自己的调用之外,您不需要让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)

你不需要让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)

您是如何获得该错误消息的?我无法用你的代码复制它。@code初学者有些人因为你问为什么就投了反对票。此外,这种新的“受欢迎的事情”似乎增加了反对票的数量,减少了用户评论原因的意愿。我会删除“谢谢”和最后一句“有人有没有……”,因为这让它看起来像是一个购物清单问题,而只是说“我怎样才能安全地加载PNG?”@JGreenwell你可能是对的,但我认为缺乏a和任何试图捕捉由
PhotoImage
引起的错误的尝试都是更简单的解释。@goyo我刚刚费力地完成了15次家庭作业,所以这个问题实际上是令人耳目一新的(即使它需要改进):@goyo当你用“fakefile.png”替换“cat.png”(一个实际文件)时(一个不存在的文件),它会产生我指出的错误。你是如何获得该错误消息的?我无法用你的代码重现它。@code初学者一些人因为你问为什么就投了反对票。还有,这个新的“欢迎的东西”这似乎增加了“否决票”,减少了用户评论原因的意愿。我会删除“谢谢”和最后一句“有人有没有……”,因为这看起来像是一个购物清单问题,而只是说“我如何才能安全加载PNG?”@JGreenwell你可能是对的,但我认为缺乏a和任何试图捕捉由
PhotoImage
引起的错误的尝试都是更简单的解释。@goyo我刚刚费力地完成了15次家庭作业,所以这个问题实际上是令人耳目一新的(即使它需要改进):@goyo当你用“fakefile.png”替换“cat.png”(一个实际文件)时(一个不存在的文件),它会产生我指出的错误。