【问题标题】:While Loop keeps crashing虽然循环不断崩溃
【发布时间】:2021-07-12 13:57:37
【问题描述】:

我是 Python 新手,我在大学学习 Cyber​​ sec 时只做了一点点。我正在尝试为工作(个人使用)编写一个小脚本。代码不会循环,一直崩溃,谁能帮忙?

"""
Created on Fri Apr 16 10:28:50 2021

@author: lukem
"""

import datetime
from datetime import *
import sys

print("Commercial Divers Work Hours")
while True:
    while True:
        
                DT1 = input("Is it todays date?:").lower()
                
            
                if DT1 == 'n' or DT1 == 'N':
                   DT2 = input("Enter Date?")
                
                elif DT1 == 'Y' or DT1 == 'y':
                      print(datetime.now())
                      
               
                
                   
                shrs = int(input("Start Time?:"))
                fhrs = int(input("Finish time?:"))
                thrs = int(input("Travel time?:"))
                job = input("At what Job?:")
                dp = input("Depth pay? How many meters?:")
                wd = input("Welding allowance? y/n:")
                    
                    
                if wd == 'y':
                
                    wd1 =  int(input("How Many Millimeters?:"))
                 
                    
                elif wd == 'n':
                    print("0")
                    break 
                                     
    
                 
                if DT1 == 'Y' or  DT1 == 'y':
                 
                   print("Date: ",datetime.now())
                   print("Start Time: ",shrs)
                   print("Finish Time: ",fhrs)
                   print("Travel Time: ",thrs)
                   print("Job or Client: ",job)
                   print("Depth Allowance in meters: ",dp)
                   print("Welding allowance in mm: ", wd1)
                   
                elif DT1 == 'n' or DT1 == 'N':
                    
                   print("Date: ",DT2)
                   print("Start Time: ",shrs)
                   print("Finish Time: ",fhrs)
                   print("Travel Time: ",thrs)
                   print("Job or Client: ",job)
                   print("Depth Allowance in meters: ",dp)
                   print("Welding allowance in mm: ", wd1)
                        
                        
                   
                    
                   
                file = open('Workhours7y.txt' , 'a')
                sys.stdout = file 
                      
                if DT1 == 'Y' or  DT1 == 'y':
                     
                       print("Date: ",datetime.now())
                       print("Start Time: ",shrs)
                       print("Finish Time: ",fhrs)
                       print("Travel Time: ",thrs)
                       print("Job or Client: ",job)
                       print("Depth Allowance in meters: ",dp)
                       print("Welding allowance in mm: ", wd1)
                       
                elif DT1 == 'n' or DT1 == 'N':
                        
                       print("Date: ",DT2)
                       print("Start Time: ",shrs)
                       print("Finish Time: ",fhrs)
                       print("Travel Time: ",thrs)
                       print("Job or Client: ",job)
                       print("Depth Allowance in meters: ",dp)
                       print("Welding allowance in mm: ", wd1)
                
                file.close()
                
                Continue
            

【问题讨论】:

  • 完整的错误是什么,完整的堆栈跟踪?
  • [SpyderKernelApp] 错误 |消息处理程序中的异常:ValueError:已关闭文件的 I/O 操作。
  • 在 Spyder 中有大约 100 行行话,但这是第一行也是最后一行。
  • 顺便说一句,您可以检查DT1.lower() == 'n',这样您就不必写信比较
  • 您正在关闭被替换的stdout,然后尝试写入它。你为什么要sys.stdout = file?为什么不直接正常写入文件,或者使用printfile参数?

标签: python loops input while-loop


【解决方案1】:

您收到此错误是因为您将sys.stdout 指向file,然后关闭file。问题是,print 写入了sys.stdout 指向的任何文件,但您已经关闭了该文件。

去掉sys.stdout = file 行,改为将prints 更改为使用file 参数:

print("Date: ",DT2, file=file)

或者,直接写入文件:

file.write(f"Date: {DT2}\n") 

【讨论】:

    【解决方案2】:

    不要 sys.stdout = 文件。 最后关闭文件,当循环从头开始时,您仍然尝试打印到关闭的文件,这不起作用,因为它已关闭。

    使用单独的命令写入文件。

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多