Pyinstaller exe yapıldıktan sonra Nonetype write hatası hk

Merhaba,

Aşağıdaki kod satırını pyinstaller ile exe yaptığımda def indir(self): fonksiyonu çalışınca aşağıdaki hatayı alıyorum. Nerede yanlış yaptığımı bulamadım. Desteğinizi rica ediyorum.

İndirme sırasında hata oluştu: “Nonetype” object has no attribute “write” hatası alıyorum.

*** Dönüştürme esnasında konsolu gizlersem hata alıyorum. Şimdi fark ettim. Konsol açık olursa hata vermiyor.

import sys
import os
import re
import tempfile  # tempfile modülünü içe aktarın
from pytube import YouTube
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QTableWidgetItem
from PyQt5.QtCore import QTimer
from moviepy.editor import AudioFileClip


from PyQt5.uic import loadUi

class YouTubeUI(QMainWindow):
    def __init__(self):
        super().__init__()
        
        # .ui dosyasını yükle
        loadUi("youtube.ui", self)
        
        # UI'ı göster
        self.show()
        
        # btn_yapistir düğmesine bağlı işlevi tanımla
        self.btn_yapistir.clicked.connect(self.yapistir)
        
        # btn_sec düğmesine bağlı işlevi tanımla
        self.btn_sec.clicked.connect(self.kayit_yeri_sec)
        
        # btn_indir düğmesine bağlı işlevi tanımla
        self.btn_indir.clicked.connect(self.indir)
        
        # btn_temizle düğmesine bağlı işlevi tanımla
        self.btn_temizle.clicked.connect(self.gecmisi_temizle)
        
        self.btn_bilgi.clicked.connect(self.show_bilgi_mesaji)
        
        # Kayıt yeri dosyasını oku ve txt_kayityeri kutusuna yaz
        self.kayit_yeri_oku()

        # Geçmiş tablosunu yükle ve sütun genişliklerini ayarla
        self.load_gecmis()
        self.QTable_Gecmis.setColumnWidth(0, 450)
        self.QTable_Gecmis.setColumnWidth(1, 110)
        
        # QTable_Gecmis tablosuna çift tıklandığında o satırdaki şarkıyı başlat
        self.QTable_Gecmis.doubleClicked.connect(self.satira_cift_tikla)
        
    def kayit_yeri_oku(self):
        try:
            with open("kayit_yeri.txt", "r") as file:
                kayit_yeri = file.read()
                self.txt_kayityeri.setText(kayit_yeri)
        except FileNotFoundError:
            pass
        
    def kayit_yeri_kaydet(self, kayit_yeri):
        with open("kayit_yeri.txt", "w") as file:
            file.write(kayit_yeri)
    
    def load_gecmis(self):
        try:
            with open("gecmis.txt", "r") as file:
                gecmis_veriler = file.readlines()
                for veri in gecmis_veriler:
                    veri = veri.strip().split(",")
                    self.QTable_Gecmis.insertRow(self.QTable_Gecmis.rowCount())
                    self.QTable_Gecmis.setItem(self.QTable_Gecmis.rowCount()-1, 0, QTableWidgetItem(veri[0]))
                    self.QTable_Gecmis.setItem(self.QTable_Gecmis.rowCount()-1, 1, QTableWidgetItem(veri[1]))
        except FileNotFoundError:
            pass
    
        
    def show_bilgi_mesaji(self):
        # Bilgi mesajını göster
        QMessageBox.information(self, "Bilgi-İletişim",
                                "Bu Program Grand14 Düğün Salonu İçin Emre AFACAN Tarafından Yazılmıştır.\n\n"
                                "Bütün Program İhtiyaçlarınız İçin 0539 286 88 99 nolu telefondan ulaşabilirsiniz.")
        
        
    def save_gecmis(self):
        try:
            with open("gecmis.txt", "w") as file:
                for row in range(self.QTable_Gecmis.rowCount()):
                    try:
                        file.write(f"{self.QTable_Gecmis.item(row, 0).text()},{self.QTable_Gecmis.item(row, 1).text()}\n")
                    except Exception as e:
                        print("Hata oluştu:", e)
        except Exception as e:
            QMessageBox.warning(self, "Hata", f"Gecmis.txt dosyasına yazılırken bir hata oluştu: {str(e)}")



    def indir(self):
        
        url = self.txt_link.text()
        kayit_yeri = self.txt_kayityeri.text()
    
        try:
            # YouTube videoyu indir
            video = YouTube(url)
            video_stream = video.streams.filter(only_audio=True).first()
    
            # Şarkı adını al
            sarki_adi = video.title
    
            # MP4 olarak geçici bir dosyaya kaydet
            temp_mp4_yolu = os.path.join(tempfile.gettempdir(), f"{sarki_adi}.mp4")
            video_stream.download(output_path=tempfile.gettempdir(), filename=f"{sarki_adi}.mp4")
                
            # MP4 dosyasını MP3 formatına dönüştür ve yüksek bitrate ile kaydet
            mp3_yolu = os.path.join(kayit_yeri, f"{sarki_adi}.mp3")
            video_clip = AudioFileClip(temp_mp4_yolu)
            video_clip.write_audiofile(mp3_yolu, bitrate="320k")
            video_clip.close()
            
            # Geçici MP4 dosyasını sil
            os.remove(temp_mp4_yolu)
            
            # İndirme tamamlandığında bilgi etiketini güncelle
            self.lbl_bilgi.setText(f"{sarki_adi} indirildi.")
            self.lbl_bilgi.setStyleSheet("color: green")  # Yeşil renk
            
            # Geçmiş tablosuna ekle
            self.QTable_Gecmis.insertRow(self.QTable_Gecmis.rowCount())
            self.QTable_Gecmis.setItem(self.QTable_Gecmis.rowCount()-1, 0, QTableWidgetItem(sarki_adi))
            self.QTable_Gecmis.setItem(self.QTable_Gecmis.rowCount()-1, 1, QTableWidgetItem("İndirildi"))
            
            # Geçmişi kaydet
            self.save_gecmis()
            
               
            # 3 saniye sonra lbl_bilgi temizlensin
            QTimer.singleShot(3000, lambda: self.lbl_bilgi.clear())
        except Exception as e:
            QMessageBox.warning(self, "Hata", f"İndirme sırasında bir hata oluştu: {str(e)}")
        
    def yapistir(self):
        # Hafızadaki metni al
        clipboard = QApplication.clipboard()
        metin = clipboard.text()
    
        # Metni kontrol et, eğer YouTube bağlantısı değilse uyarı göster
        if not re.match(r"https?://(?:www\.)?youtube\.com/watch\?v=[\w-]+", metin):
            QMessageBox.warning(self, "Uyarı", "Hafızadaki metin bir YouTube bağlantısı değil.")
            return
    
        # YouTube bağlantısı ise txt_link kutusuna yapıştır
        self.txt_link.setText(metin)
        
    def kayit_yeri_sec(self):
        dosya_yolu = QFileDialog.getExistingDirectory(self, "Kayıt Yeri Seç")
        if dosya_yolu:
            self.txt_kayityeri.setText(dosya_yolu)
            self.kayit_yeri_kaydet(dosya_yolu)
    
    def gecmisi_temizle(self):
        # Geçmiş tablosundaki tüm satırları kaldır
        self.QTable_Gecmis.setRowCount(0)
        # Kayıtları tuttuğumuz dosyayı temizle
        open("gecmis.txt", "w").close()

    def satira_cift_tikla(self, item):
        # Çift tıklanan satırın indeksini al
        row_index = item.row()
        
        # Satırın şarkı adını ve indirme durumunu al
        sarki_adi = self.QTable_Gecmis.item(row_index, 0).text()
        durum = self.QTable_Gecmis.item(row_index, 1).text()
        
        # Şarkıyı txt_kayityeri'nde belirtilen adreste bul ve başlat
        dosya_yolu = self.txt_kayityeri.text()
        mp3_yolu = os.path.join(dosya_yolu, f"{sarki_adi}.mp3")
        if os.path.exists(mp3_yolu) and durum == "İndirildi":
            os.startfile(mp3_yolu)
        else:
            QMessageBox.warning(self, "Uyarı", "Şarkı bulunamadı veya indirilmemiş.")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = YouTubeUI()
    sys.exit(app.exec_())

Exception’i daha detayli yazdirmaniz veya yakalamayi birakmaniz lazim. Sorun muhtemelen sys.stdout’un None olmasi, ama nereden tetiklendigini bilmemize imkan yok.