Перехват исключения Tkinter для отсутствующего файла - PullRequest
0 голосов
/ 26 августа 2018

Я пишу программу Tkinter, которая загружает некоторые изображения в формате .png.

Поскольку файлы могут быть неисправными или не существовать, рекомендуется использовать блок try-Кроме.Сначала я проверяю файл с помощью общего Python.Затем я загружаю файл изображения в Tkinter, если он проходит общий блок пробного исключения Python:

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, но затем неожиданно был недоступен для вызова Tkinter.

Когда я намеренно завершил работу программы, выполнив командупри вызове недоступного файла я получаю:

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

Это именно тот тип ошибки (файл не найден), который я пытаюсь перехватить внутри Tkinter.Я охотился вокруг, но я не смог найти способ для Tkinter попробовать - кроме его собственного вызова: PhotoImage(...).

Как я могу безопасно загрузить PNG?

1 Ответ

0 голосов
/ 26 августа 2018

Вам не нужно заставлять 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)
...