Python pywintypes.com_error发生在一台服务器上但不发生在另一台服务器上

时间:2017-05-24 19:39:01

标签: python python-2.7 windows-server-2008-r2 windows-server-2012-r2

我有一个在新服务器上运行的应用程序,它会引发一些我们以前从未见过的与unicode相关的奇怪错误,对于某些字符(例如 S with Caron )而不是其他字符(例如, e with umlaut )。应用程序已成功处理unicode字符,包括 S with Caron 在服务器A的生命周期内(大约4年)。现在迁移到服务器B,我看到这些错误,不知道如何解决。

因为代码库在两个位置都是相同的,我们在服务器A上没有看到这个错误,现在只在(新)服务器B上,我认为这不是代码中的问题本身,而是服务器上的一些配置。

背景

两台运行Python 2.7的服务器,运行Windows Server 2008 R2的服务器A和运行Windows Server 2012 R2的服务器B.新服务器正在运行SPSS Dimensions v7,而旧服务器正在运行Dimensions v6,因此这里有很多移动部件。

Python应用程序从SPSS Statistics文件中读取元数据,并通过对象的AddNew方法将其传递给COM对象(另一个IBM对象类型):

table = self.tom.Tables.AddNew("Table" + iTable, sideAxis + u" * " + topAxis)

topAxis包含unicode字符串:škoda,它在服务器A上正确传递:

'škoda'

当服务器B尝试传递以下内容时:

'\u0161koda'

回溯

这似乎表明Tables.AddNew方法正在接收它无法处理的内容。 S with Caron U+0160在服务器B上引发错误,因为SAV文件中不存在标识符\u0161koda我不明白为什么它会在一台服务器上发生但不会发生在另一台服务器上。

File "D:\chartbuilder\versions\2.3\tigertom.py", line 1824, in CreateTable
    table = self.tom.Tables.AddNew("Table" + iTable, sideAxis + u" * " + topAxis)
File "<COMObject <unknown>>", line 3, in AddNew
File "C:\python27\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Exception occurred.', (0, None, u"The expression 'qj_make * {\u0161koda}' is not valid: Unknown category '\u0161koda'", None, 0, -2147352570), None)

添加&#39; l诊断

在这两种环境中,topAxis似乎是basetring&amp;的实例。的unicode:

2017-05-24 13:56:48.755||INFO||topAxis is basestring: True 
2017-05-24 13:56:48.755||INFO||topAxis is unicode: True 

在两台服务器上,我可以打印到控制台,并将表达式写入日志文件:

print topAxis.encode('utf-8',errors='backslashreplace')
self.logger.info(u"top axis\n{}\n\t".format(topAxis))

服务器A上的日志文件:

enter image description here

服务器B上的日志文件:enter image description here

从服务器A打印控制台:

enter image description here

服务器B上的控制台打印:

enter image description here

由于代码在服务器A上按预期工作,但在服务器B上没有,我试图确定根本原因,并希望它是服务器配置而不是IBM源代码中的错误。

我也可以在安装了Dimensions 7的笔记本电脑上复制错误。

问题

  1. 我是否正确地假设这是与正在接收数据的特定COM对象相关的错误?
  2. 除了显而易见的版本差异外,服务器本身是否有任何配置方式(我在这里我的重量级以上,但可能与代码页,stdout / stdin等有关?)可能导致或者造成这种错误?

0 个答案:

没有答案