Проблема обработки исключений с помощью OSError [Errno 22] - PullRequest
0 голосов
/ 23 февраля 2020

Документация 3.7 гласит, что мы должны обрабатывать исключения 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()

Ввод имени файла с допустимыми символами работает просто отлично. Мне нужна программа, чтобы не взломать sh и передать это исключение. Любой совет, что мне не хватает?

Спасибо

1 Ответ

1 голос
/ 23 февраля 2020

Код, связанный с открытием и чтением из файла, должен находиться в блоке try оператора 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: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...