2015-03-04 2 views
2

Я преподаю интро-программирующий класс в Python, и мы говорим об исключениях и вводах файлов. Я ищу способ быстро и просто проверить их обработку ошибок. Теперь при открытии файла легко вызвать IOError (просто убедитесь, что нет файла с указанным именем файла), но я бы хотел проверить, способны ли они обрабатывать IOErrors, которые возникают чтение или запись в файл, и я не могу представить простой и быстрый способ убедиться, что в это время произойдет IOError. Я попытался использовать двоичный файл, который открывается нормально, но вызывает проблемы, если вы пытаетесь его прочитать, но это вызывает UnicodeDecodeError, который не является типом IOError в Python.Как легко и последовательно вызывать IOError какого-либо рода при чтении или записи в текстовый файл?

Любые мысли?

+1

'с открытым ("foo.txt"), как F: f.write ("Foo") 'приведет к ошибке io. открытие для записи и попытки чтения также вызовет ошибку io, 'open (" foo.txt "," w ") как f: для строки в f: ...' –

+0

Вы можете создать объект mock file, который вводит ошибки. Если вы участвуете в модульном тестировании, и особенно если вы участвуете в практике тестирования, это будет хорошим способом. – tdelaney

+0

Есть ли способ сделать это без редактирования исходного кода учащегося? Это будет работать, но я надеялся на что-то более простое. –

ответ

0

Вставьте код, который выполняет повторную привязку open() (и, возможно, file) в начале кода для теста:

>>> def open(path, *args, **kw): 
...  path = os.path.join("/some/path/that/dont/exist", path) 
...  return __builtins__.open(path, *args, **kw) 
... 
>>> open("foo.bar") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 3, in open 
IOError: [Errno 2] No such file or directory: '/some/path/that/dont/exist/foo.bar'