开发者

Why is the information for pywintypes.com_error unreadable?

Under Python 2.7.2 with pywin32-216.win32-py2.7 installed, when I use win32com module to process Excel on windows as follows:

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

I get an error:

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)

While the imformation is not readable, I don't konw what's going wrong!

After searching on the Internet, I find something helpful at http://www.python-forum.org/pythonforum/viewtopic.php?f=15&t=17665:

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Office Excel', u"'test .xls' could not be found. Check the spelling of the file name, and verify that the file location is correct.\n\nIf you are trying to open the file f开发者_开发技巧rom your list of most recently used files on the File menu, make sure that the file has not been renamed, moved, or deleted.", u'C:\Program Files\Microsoft Office\OFFICE11\1033\xlmain11.chm', 0, -2146827284), None)

I guess it's the same problem, so I create an Excel file 'D:/test.xls' first, and then everything turns ok:

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

If I got the readable error tip, I would solve the problem immediately without any difficult!

I wonder why is the error I get from win32com.client like that? Is there anything I can do to make the information readable?

I will appreciate your help!


I imagine that it has come out like that because you are using internationalization settings for somewhere in Far East Asia (China, perhaps?) and you're using Python in the Command Prompt. I'm not sure whether the problem is with Python, the Command Prompt or the combination of the two, but either way the combination of these two doesn't work particularly well with non-Latin internationalization settings.

I'd recommend using IDLE instead, since that appears to support Unicode characters properly. Here's what happens when I viewed that last string in IDLE. The text doesn't mean anything to me, but it might do to you:

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”的文档已经打开。不能同时打开同名文件,无论它们是否在同一文件夹中。
要打开第二份文档,请关闭已经打开的文档,或者重新命名其中的一个文档。
>>> 

However, even when using IDLE, chances are that when you get the exception, the text will still appear as it did above. If this happens, what you need to do is to get the data from the last exception raised and print the relevant string from within it.

To get the last exception raised in the interpreter, you can use sys.last_value. Here's an example with a different exception message:

>>> 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
>>> 


I experienced a similar error. In my particular case I was trying to use a temporary file created like this:

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

Whether the name can be used to open the file a second time, while the named temporary file is still open, varies across platforms (it can be so used on Unix; it cannot on Windows NT or later).

So, it seems that I cannot re-use that file in Windows OS. And that is the reason that I am getting the error.

In your case, you may want to check how the file is being created in the first place.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜