首页 > 解决方案 > FileNotFoundError Try and except 似乎不起作用

问题描述

 def make_sender(self):
        a = False
        y = input("Make sender (Y/N)?")
        if y.lower() == "y":
            a = True
        while a == True:
            s = input("Enter folder name : ")
            t = input("Enter profile name: ")
            try:
                p = os.getcwd()+("\profiles")
                d = os.path.join(p, s,t)
                with open(d+".txt","w") as f:
                    print(">>> Opened ")
            except FileNotFoundError:
                print(">>> File not found ")
            
            with open(d+".txt","w") as f:
                temp = input("Full Name: ")
                temp = temp.title()
                f.write(temp+"\n")

                temp = input("House Number: ")
                f.write(temp+"\n")

                temp = input("Street Name : ")
                f.write(temp+"\n")
                
                temp = input("Postcode    : ")
                f.write(temp+"\n")

                temp = input("Email       : ")
                f.write(temp+"\n")
            a = False

认为我的代码会继续运行,直到输入正确的数据。认为我的尝试和例外是错误的。我得到了正确的除代码,但认为缩进或有什么问题。

标签: pythonwhile-looptry-except

解决方案


您可以将 with 块移出循环或将其放在 else 块下。首选将需要额外检查a(或者return在开始时更简单 if y.lower != 'y'。我认为以下方法更清洁:

 def make_sender(self):
        y = input("Make sender (Y/N)?")
        while y.lower() == 'y':
            s = input("Enter folder name : ")
            t = input("Enter profile name: ")
            try:
                p = os.getcwd()+("\profiles")
                d = os.path.join(p, s,t)
                with open(d+".txt","w") as f:
                    print(">>> Opened ")
            except FileNotFoundError:
                print(">>> File not found ")
            else:
                with open(d+".txt","w") as f:
                    temp = input("Full Name: ")
                    temp = temp.title()
                    f.write(temp+"\n")

                    temp = input("House Number: ")
                    f.write(temp+"\n")

                    temp = input("Street Name : ")
                    f.write(temp+"\n")
                
                    temp = input("Postcode    : ")
                    f.write(temp+"\n")

                    temp = input("Email       : ")
                    f.write(temp+"\n")
                    
                break

推荐阅读