Почему информация для pywintypes.com_error не читается? - PullRequest
1 голос
/ 25 сентября 2011

В Python 2.7.2 с установленным pywin32-216.win32-py2.7, когда я использую модуль win32com для обработки Excel в Windows следующим образом:

>>> import win32com.client
>>> xlsApp = win32com.client.Dispatch('Excel.Application')
>>> xlsApp.Workbooks.Open(r'D:/test.xls')

Я получаю ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3',
(0, u'Microsoft Office Excel', u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6
863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540c\u540
d\u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\
u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4e8c\u4efd\u6587\u6863\uff0c\
u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u9
1cd\u65b0\u547d\u540d\u5176\u4e2d\u7684\u4e00\u4e2a\u6587\u6863\u3002', None, 0,
 -2146827284), None)

Хотя информация недоступна для чтения, я не понимаю, что происходит!

После поиска в Интернете я нашел кое-что полезное на http://www.python -forum.org /pythonforum / viewtopic.php? f = 15 & t = 17665 :

pywintypes.com_error: (-2147352567, «Возникло исключение.», (0, u'Microsoft Office Excel ', u "«test .xls» не найден. Проверьте правильность имени файла и убедитесь, что местоположение файла указано правильно. \ n \ nЕсли вы пытаетесь открыть файл из списка последних использованных файлов в меню «Файл», убедитесь, что файл не был переименован, перемещен или удален. ", u'C: \ Program Files \ Microsoft Office \ OFFICE11 \ 1033 \ xlmain11.chm ', 0, -2146827284), нет)

Я полагаю, это та же проблема, поэтому я сначала создаю файл Excel 'D: /test.xls', а затем всеns ok:

>>> xlsApp.Workbooks.Open(r'D:/test.xls')
<COMObject Open>

Если бы я получил читаемый совет об ошибке, я бы немедленно решил эту проблему без каких-либо трудностей!

Интересно, почему я получаю ошибку от win32com.client??Могу ли я что-нибудь сделать, чтобы информация стала читабельной?

Буду признателен за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 25 сентября 2011

Я полагаю, что так получилось, потому что вы используете настройки интернационализации где-то в Дальневосточной Азии (возможно, в Китае) и используете Python в командной строке. Я не уверен, связана ли проблема с Python, командной строкой или их сочетанием, но в любом случае комбинация этих двух способов не очень хорошо работает с настройками неязыкового интернационализации.

Я бы рекомендовал вместо этого использовать IDLE , поскольку это, похоже, правильно поддерживает символы Юникода. Вот что происходит, когда я просматривал эту последнюю строку в IDLE. Текст ничего не значит для меня, но может сделать для вас:

IDLE 2.6.4      
>>> z = u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540c\u540d\u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4e8c\u4efd\u6587\u6863\uff0c\u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u91cd\u65b0\u547d\u540d\u5176\u4e2d\u7684\u4e00\u4e2a\u6587\u6863\u3002'
>>> print z
名为“test.xls”的文档已经打开。不能同时打开同名文件,无论它们是否在同一文件夹中。
要打开第二份文档,请关闭已经打开的文档,或者重新命名其中的一个文档。
>>> 

Однако, даже при использовании IDLE, есть вероятность, что когда вы получите исключение, текст все равно будет отображаться так же, как и выше. Если это произойдет, вам нужно получить данные из последнего вызванного исключения и print соответствующую строку из него.

Чтобы вызвать последнее исключение в интерпретаторе, вы можете использовать sys.last_value. Вот пример с другим сообщением об исключении:

>>> import sys
>>> with open('nonexistent.txt') as f: pass
...
Traceback (most recent call last):
  File "", line 1, in 
    with open('nonexistent.txt') as f: pass
IOError: [Errno 2] No such file or directory: 'nonexistent.txt'
>>> sys.last_value
IOError(2, 'No such file or directory')
>>> print(sys.last_value[1])
No such file or directory
>>> 
0 голосов
/ 02 января 2013

Я столкнулся с подобной ошибкой.В моем конкретном случае я пытался использовать временный файл, созданный следующим образом:

fileprefix = 'Report'
filesuffix = '.xlsx'
filename = tempfile.gettempdir() + '\\' + fileprefix + filesuffix
xfile = tempfile.NamedTemporaryFile(suffix = filesuffix, prefix = fileprefix)

Возможность использования имени для открытия файла во второй раз, когда именованный временный файл все еще открыт, различаетсяплатформы (его можно использовать в Unix; нельзя в Windows NT или более поздней).

Итак, похоже, я не могу повторно использовать этот файл в ОС Windows.И это причина того, что я получаю ошибку.

В вашем случае вы можете сначала проверить, как создается файл.

...