2013-03-07 2 views
0

В попытке ... кроме блока я хочу записать сообщение об ошибке исключения в файл в исключении.с открытым (файлом) за исключением

try: 
    doc = etree.parse(urllib2.urlopen(url)) 
except Exception, e: 

    print '%s: %s' % (e, url) 
    with open('error.txt', 'a') as f: 
    f.write('%s:%s\n' % url, e) 
    return 

Печать показывает ошибку, но с открытым ... f.write не отменяется.

в том же сценарии проверка RelaxNG записывается в файл

if not RELAXNG.validate(doc): 
    with open('error.txt', 'a') as f: 
    f.write('%s\n' % RELAXNG.error_log) 
    return 

Может кто-нибудь объяснить мне, почему

with open('myfile.txt', 'a') as f 
    f.write(... 

Возможное в если заявление о, но не в кроме?

+0

Рассмотрите возможность использования [модуля регистрации] (http://docs.python.org/2/howto/logging.html#basic-logging-tutorial) –

ответ

4

write() не принимает несколько аргументов; вы, вероятно, отсутствует скобку:

f.write('%s:%s\n' % (url, e)) 

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

0

Операции с файлами внутри except работает нормально.

>>> try: 
    raise SyntaxError("Hello") 
except Exception: 
    with open("in.txt") as f: 
     print "F" 


F 
0

Должно работать. Попробуйте это, например:

try: 
    raise Exception 
except Exception: 
    with open('error.txt', 'a') as f: 
     f.write('foobar') 

Если вы запустите вышеуказанное, вы увидите, что foobar был записан в файл.

Возможно ли передать файл error.txt в ваш процесс? Существует некоторая причина, по которой он не записывается в ваш файл, но это не потому, что контекст файла «с» не разрешен внутри блока except.

Смежные вопросы