Tkinter'de ta yakalama ile ilgili

Merhaba. Tkinter’de hata yakalama yapmak istiyorum ama try, except komutları işe yaramıyor. Kodlarım kısaca şu şekilde:

    try:
        from tkinter import *
        from tkinter import messagebox as mesaj
        from tkinter.ttk import Combobox
        from tkinter import filedialog
        from shutil import copyfile
        import os
        
        def surumekle():
            yenisurum = filedialog.askopenfilename(initialdir="/", title="Yeni Sürüm Dosyası Seçin")
            if ".jar" in yenisurum:
                copyfile(yenisurum, "jars")
            elif yenisurum == "":
                gereksiz = ""
            else:
                mesaj.showerror("Hata!", ".jar uzantılı bir dosya seçmeniz gerekmektedir!")

    except PermissionError:
        mesaj.showwarning("Uyarı!", "Uygulamayı yönetici olarak çalıştırmayı deneyin.")

Şimdiden teşekkürler. Kolay Gelsin…

Kodunuz bu hali ile hata vermiyor. Zaten fonksiyonu çağırmıyorsunuz. Hata veren kodu atarsanız yardım edebiliriz. Ayrıca fonksiyonu try bölümünün dışında çağırıyorsanız hatanın yakalanmaması gayet normal.

1 Beğeni

Benim kodum aynı bu şekil zaten kopyala yapıştır yaptım. Konsol çıktısı şu şekilde:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\yunus12320\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/yunus12320/Desktop/Python Projelerim/Minecraft_Server_Kurucu_v1.py", line 33, in surumekle
    copyfile(yenisurum, "jars")
  File "C:\Users\yunus12320\AppData\Local\Programs\Python\Python37-32\lib\shutil.py", line 121, in copyfile
    with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 'jars'

Yani dediğim gibi seçilen dosyanın kopyalanmasına pycharm yönetici olarak çalıştırılmadığı için bilgisayar izin vermiyor ve uyarı penceresinide göstermiyor.

Aslında bütün kodunuz bu değil, özellikle vurguladığım halde fonksiyonu çağırdığınız kısmı atmadınız. Siz bu hatayı yakalamak istiyorsunuz, ama try bölümünü fonksiyonunun dışına koymuşsunuz. Fonksiyonu bu bölümün dışında çağırdığınızda try bölümü tetiklenmez, fonksiyon tanımlanırken tetiklenebilir. try kısmını fonksiyonun içine yerleştirin:

from tkinter import *
from tkinter import messagebox as mesaj
from tkinter.ttk import Combobox
from tkinter import filedialog
from shutil import copyfile
import os
    
def surumekle():
    try:
        yenisurum = filedialog.askopenfilename(initialdir="/", title="Yeni Sürüm Dosyası Seçin")
        if ".jar" in yenisurum:
            copyfile(yenisurum, "jars")
        elif yenisurum == "":
            gereksiz = ""
        else:
            mesaj.showerror("Hata!", ".jar uzantılı bir dosya seçmeniz gerekmektedir!")

    except PermissionError:
        mesaj.showwarning("Uyarı!", "Uygulamayı yönetici olarak çalıştırmayı deneyin.")

Ayrıca kodunuzda hatalar var, uzantıyı belirleme şekliniz yanlış.

1 Beğeni

Teşekkürler. Kolay Gelsin…

1 Beğeni