OSError [Errno 22] 的异常处理问题

Exception Handling Problem with OSError [Errno 22]

3.7 documentation 声明我们应该这样处理 OSError 异常:

except OSError as err:
    print("OS error: {0}".format(err))

当我这样做时,程序退出时仍然出现错误。错误是:

   File "F:/working/workfile.py", line 55, in main
    OutFile = open(FileName, 'w')
OSError: [Errno 22] Invalid argument: 'bad<>file.txt'

完整的相关代码区域:

def main():
        InvalidInput = True

        while InvalidInput:
                #Start Exception handling
                try:
                        # Ask user for how many random numbers to create
                        NumberCount = int(input('How many numbers do you want to generate?'))

                        # Ask the user where the created numbers are to be stored
                        # Error out if invalid characters are used
                        FileName = input('Where do you want the files to be written to?')

                # Catch the error if invalid characters are used

                except OSError as err:
                        print("OS error: {0}".format(err))
                        print ('Please enter a valid path/filename.')
                        InvalidInput = True

                except IOError:
                        print ('Please enter a valid path/filename.')
                        InvalidInput = True

                except ValueError:
                        print ('Invalid number.  Please enter only integers')
                        InvalidInput = True

                else:
                        InvalidInput = False
                        OutFile = open(FileName, 'w')
                        for Number in range (NumberCount):
                                # Call the function(s) for generating random numbers
                                # and writing to the output file
                                ReturnNumber = RandomNumbers.RandomWriter ()
                                OutFile.write (str(ReturnNumber))
                                OutFile.write ("\n")

                                print ('Writing ', ReturnNumber)

                        # Close the file when finished
                        OutFile.close()

        print ('Closing the open file.')

main()

输入包含有效字符的文件名就可以了。我需要程序不会崩溃,并提交此异常。关于我所缺少的任何建议?

谢谢

处理打开和读取文件的代码应该在 try/except 语句的 try 块中,如下所示:

try:
    # ... preceding code...

    OutFile = open(FileName, 'w')
    for Number in range (NumberCount):
        # Call the function(s) for generating random numbers
        # and writing to the output file
        ReturnNumber = RandomNumbers.RandomWriter ()
        OutFile.write (str(ReturnNumber))
        OutFile.write ("\n")

        print ('Writing ', ReturnNumber)

    # Close the file when finished
    OutFile.close()
except: