I'm trying to check whether the user entered the correct path or not.
when the output appears it doesn't give any error but when i close the output it gets an error :
but when I try to catch the error it still returns the same error
Here's the code to try to catch the error :
when the output appears it doesn't give any error but when i close the output it gets an error :
Traceback (most recent call last): File "voice_translate.py", line 115, in <module> main() File "voice_translate.py", line 88, in main if check_file(values["Path"]): TypeError: 'NoneType' object is not subscriptableI think it's wrong the
os.path.isfile()method
but when I try to catch the error it still returns the same error
Here's the code to try to catch the error :
def check_file(path): try: os.path.isfile(path) return True except TypeError: return Falseand this is the main code :
import os import pyttsx3 import requests import googletrans import PySimpleGUI as sg import speech_recognition as sr def audio_layout(): """ return audio layout """ layout = [ [sg.In(key="Path", size=(39, 0))], [ sg.FileBrowse("Browse", size=(10, 0), target="Path"), sg.Button("Text", size=(10, 0)), sg.Button("Voice", size=(10, 0)), ], ] return sg.Window("Voice Translate", layout, finalize=True) def result_layout(): """ return result layout """ layout = [[sg.Output(size=(60, 20))]] return sg.Window("Voice Translate", layout, finalize=True) def language_translate(text, lang="id"): """ returns the text after it is translated """ translator = googletrans.Translator() lang_convert = translator.translate(text, dest=lang) return lang_convert.text def audio_to_text(audio): """ convert audio to text """ recognizer = sr.Recognizer() sound = sr.AudioFile(audio) with sound as source: audio = recognizer.record(source) return recognizer.recognize_google(audio) def text_to_audio(text): """ convert text into voice """ engine = pyttsx3.init() engine.say(text) engine.runAndWait() engine.stop() def check_internet(): """ return true if internet is connect """ # google url only to test whether the user is connected to the internet url = "https://www.google.com/" timeout = 3 try: requests.head(url, timeout=timeout) return True except requests.ConnectionError: sg.popup("Lost Connection!") return False def check_file(path): try: os.path.isfile(path) return True except TypeError: return False # main program def main(): audio_window, result_window, allowed = audio_layout(), None, False while check_internet(): # read/get all event in all window window, event, values = sg.read_all_windows() # audio layout/window event handling if window == audio_window and event in (sg.WIN_CLOSED, "Exit"): break # bug! "TypeError: 'NoneType' object is not subscriptable" if check_file(values["Path"]): convert_to_text = audio_to_text(values["Path"]) text_translate = language_translate(convert_to_text) allowed = True # user get the translate result of their voice if event == "Text" and allowed: result_window = result_layout() # show the output on output widget print(text_translate) if event == "Voice" and allowed: text_to_audio(text_translate) # result layout/window event handling if window == result_window and event in (sg.WIN_CLOSED, "Exit"): result_window.close() result_window = None allowed = False audio_window.close() if result_window is not None: result_window.close() if __name__ == "__main__": main()I know I can put the try and except statements above if or even replace them but I think it becomes unclean code and might make my code dirty