2011-01-13 5 views
5

У меня есть следующий код:Атрибут имени OSError недоступен?

except(OSError) as (errno, strerror, filename): 
print "OSError [%d]: %s at %s" % (errno, strerror, filename) 

Он работает большой, если она не соответствует OSError Num. 123 (The file name, directory name, or volume label syntax is incorrect). Затем я получаю следующее сообщение об ошибке на за исключением строки кода:

ValueError: need more than 2 values to unpack 

Это решается не с помощью атрибута filename. Однако мои требования не позволяют мне не использовать этот атрибут.

Есть ли другой способ?

ответ

24

Я не видел такого рода обработку исключений, где вы передаете атрибуты объекта Exception в as-предложение.

Обычно вы обрабатываете except ExceptionObject as e и обрабатываете атрибуты, как обычно обрабатываете атрибуты объекта.

OSError содержит атрибут errno - это числовой код ошибки из errno, а атрибут strerror - соответствующая строка, а для исключений, связанных с пути к файловой системе (например, chdir() или unlink()), экземпляр исключения будет содержат третий атрибут, имя файла, которое является именем файла, переданным функции.

import os 
try: 
    os.chdir('somenonexistingdir') 
except OSError as e: 
    print e.errno 
    print e.filename 
    print e.strerror 
+9

«Я не видел такого рода обработку исключений» = самый лучший способ сказать, что вы делаете это неправильно. – marr75

+0

Спасибо. это сработало! – Alex58

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