Запись в файл не работает, если pywinauto выдает исключение

Я новичок в Python, поэтому не могу точно сказать, где проблема: в PyWinAuto или в моих знаниях Python.

Я запускаю следующий скрипт Windows (Python 3.5.2):

#!/usr/bin/env python3
import os
import sys
import pywinauto

def testLicenseForm():
    app = pywinauto.Application().Start('Calc.exe')

    try:
        LicenseForm = app['Nonsense name']
        LicenseForm.OK.Click()
 #       raise pywinauto.findbestmatch.MatchError
 #       raise pywinauto.timings.TimeoutError
    except (pywinauto.timings.TimeoutError, pywinauto.findbestmatch.MatchError) as e:
        f = open('R:\Temp\diagnostic\log.errors', 'w')
        f.write('Exception raised')
        sys.exit('Error in script'.format(__file__))

if __name__ == '__main__':
    testLicenseForm()

Проблема в том, что log.errors создается, но пустой. Если я изменю код следующим образом:

#    LicenseForm.OK.Click()
     raise pywinauto.findbestmatch.MatchError

файл log.errors создается и содержит в себе ожидаемый текст. Не уверен, в чем проблема. Как изменить скрипт для записи некоторой информации в файл, если pywinauto выдает исключение.


person alesnn    schedule 01.09.2016    source источник


Ответы (1)


f.write не гарантирует запись данных, пока вы не закроете файл (f.close()) или не выполните f.flush(). Но я бы порекомендовал вам следующий способ:

with open('R:\Temp\diagnostic\log.errors', 'w') as f:
    f.write('Exception raised')

Этот контекстный менеджер автоматически закроет файл при выходе из раздела with. Файл гарантированно закроется, даже если внутри with возникнет исключение.

person Vasily Ryabov    schedule 01.09.2016
comment
Благодарю вас! Это именно то, что я искал. К сожалению, у меня недостаточно репутации, чтобы проголосовать за ваш ответ. - person alesnn; 01.09.2016
comment
Не проблема. Вы можете принять ответ без голосования. Потому что это твой вопрос. Репутация не имеет значения для принятия. - person Vasily Ryabov; 01.09.2016