[急]Py2exe生成exe,但运行出错

[急]Py2exe生成exe,但运行出错



[Copy to clipboard] [ - ]
CODE:
defaultencoding = sys.stdout.encoding

SERVER=("192.168.0.152", 2626)

def str2uni(string, enc = defaultencoding):
    '''convert str to unicode
    you can specify encoding. default to local encoding.
    string can be a int.
    '''
    if isinstance(string, str):
        return unicode(string, enc)
    elif isinstance(string, int):
        return unicode(str(string), enc)
    else:
        return string

请教大家了,上边是部分代码。使用py2exe生成了exe文件,但是运行的时候报错,log里边的信息是:

QUOTE:
Traceback (most recent call last):
  File "chat.py", line 7, in <module>
AttributeError: 'Blackhole' object has no attribute 'encoding'
Traceback (most recent call last):
  File "chat.py", line 7, in <module>
AttributeError: 'Blackhole' object has no attribute 'encoding'

那位知道是怎么回事?
似乎报错的地方与程序根本对不上。
确实是因为

[Copy to clipboard] [ - ]
CODE:
defaultencoding = sys.stdout.encoding

这句报的错误。

我在命令行运行:"sys.stdout.encoding"就可以正常运行,且输出的结果是"cp936"

如果我将代码

[Copy to clipboard] [ - ]
CODE:
defaultencoding = sys.stdout.encoding

修改为

[Copy to clipboard] [ - ]
CODE:
defaultencoding = "cp936"

就不会报错,但是会出现另一个错误,就是提示不能识别"cp936".

另外在经过Py2exe处理之前,脚本本身可以正常的运行。

希望大家帮忙。我刚刚学习python不久。
顶起来, 大家帮忙啊。

版主,你管不管?~~~~
sys.stdout.encoding不一定会有值。
使用

import locale
encoding = locale.getdefaultlocale()[1]

另,建议使用python2.4版本以上。
谢谢,但是有一点我有些不明白。请教一下:
我使用的版本是python2.5,在命令行输入:

[Copy to clipboard] [ - ]
CODE:
import locale
encoding = locale.getdefaultlocale()[1]

得出的结果是:"('zh_CN', 'cp936')"

我的问题是:
1. 显然这里"encoding = locale.getdefaultlocale()[1]"的结果必然是'cp936',而且如果我直接使用'cp936'会提示'unknown encoding: cp936'的错误,请问这个错误如何解决。

2. "defaultencoding = sys.stdout.encoding"这个命令的结果是变化的,我在程序中加入了打印语句,发现这个值有时候是"cp936", 有时候是"unicode", 不知道这是怎么回事。

我想是你没有把lib/encodings目录打进去。查看一下那个lib包中是否有encodings目录。不过我记得高版本的py2exe好象会自动打吧,有些记不清了。去py2exe的wiki上查一查吧。
请问怎么查看你说的lib包中的encodings目录?

我用py2exe后,目录下便出现了build和dist这两个目录,其中我在"build\bdist.win32\winexe\collect-2.5\encodings"有encodings目录,其中有两个文件"__init__.pyo"和"aliases.pyo"不知道是不是你说的?
哦,突然发现在python2.5的lib目录下有encodings的目录,而且里边没有cp936.py这个文件。
cp936不是一个标准的编码,我以前写过一篇blog讨论过这个问题。它是一个别名,与mbcs对应的。