尝试将异常重定向到STDERR时,我遇到了一个奇怪的错误。
我有一个脚本用于加载几个“插件”,作为主要入口程序。这些插件可以用来连接数据库,解析文本数据,连接到Web服务等......
是这样的:
try:
Run plugins here...
#All was ok!
print "Ok!"
sys.exit(0)
except Exception,e:
sys.stderr.writelines([unicode(e),u'\n',u'\n'])
traceback.print_exc(file=sys.stderr)
sys.exit(-1)
这是在命令行中执行的,有时我会收到错误:
TypeError: writelines() argument must be a sequence of strings
我不知道在这个地球上,Exception是不是在这里作为字符串返回。
答案 0 :(得分:6)
我的解决方案是用UTF-8编码文本
file.writelines("some unicode text here".encode('utf-8'))
答案 1 :(得分:2)
我终于搞清楚了。
这发生在:
try:
raise Exception(u'Error with unicode chars')
except:
sys.stderr.write(u'%s\n\n' % e)
我讨厌(来自activestate社区):
def safe_unicode(obj, * args):
""" return the unicode representation of obj """
try:
return unicode(obj, * args)
except UnicodeDecodeError:
# obj is byte string
ascii_text = str(obj).encode('string_escape')
return unicode(ascii_text)
def safe_str(obj):
""" return the byte string representation of obj """
try:
return str(obj)
except UnicodeEncodeError:
# obj is unicode
return unicode(obj).encode('unicode_escape')
#code
except Exception,e:
sys.stderr.write(u'%s\n\n' % safe_unicode(safe_str(e)))
答案 2 :(得分:0)
e
极有可能出错。我不知道为什么。可能某些事情没有得到适当的强制。
这有帮助吗?
sys.stderr.write(u'%s\n\n' % e)
答案 3 :(得分:0)
为了更好地了解正在发生的事情,请在try中包含有问题的声明:except:...在except子句中,执行
print repr(e), repr(unicode(e))
为什么您需要unicode
个字符串而不是str
字符串?