python 使用OptionParser的时候使用中文出错的解决过程

今天在使用OptionParser的时候,在填写帮助信息的时候使用了中文,却发现报了一系列的错误
代码如下
#!/usr/bin/env python
#coding:UTF-8
import ConfigParser,sys
try:
from optparse import OptionParser
except ImportError:
try:
from optik import OptionParser
except ImportError:
raise ImportError, ‘Requires Python 2.3 or the Optik option parsing library.’
parser = OptionParser()
parser.add_option(“-f”,”–file”,dest=”name”,
help=”帮助信息”,metavar=”FILE”)
parser.add_option(“-q”,”–quit”,
action =”store_false”,dest=”verbose”,default=”True”,
help=”帮助信息”)
(options,args) = parser.parse_args()
错误信息
File “get-parser-cn.py”, line 23, in <module>
(options,args) = parser.parse_args()
File “/usr/lib/python2.5/optparse.py”, line 1387, in parse_args
stop = self._process_args(largs, rargs, values)
File “/usr/lib/python2.5/optparse.py”, line 1431, in _process_args
self._process_short_opts(rargs, values)
File “/usr/lib/python2.5/optparse.py”, line 1538, in _process_short_opts
option.process(opt, value, values, self)
File “/usr/lib/python2.5/optparse.py”, line 774, in process
self.action, self.dest, opt, value, values, parser)
File “/usr/lib/python2.5/optparse.py”, line 796, in take_action
parser.print_help()
File “/usr/lib/python2.5/optparse.py”, line 1657, in print_help
file.write(self.format_help().encode(encoding, “replace”))
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 124: ordinal not in range(128)
和 @smallfish9 同学 讨论了一番,并搜索了一些资料后,找到了解决方案如下
import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 ,可以注释掉来试试,会提示没有这个setdefaultencoding方法的
#!/usr/bin/env python
#coding:UTF-8
import ConfigParser,sys
reload(sys)
print sys.getdefaultencoding()
sys.setdefaultencoding(‘utf-8′)
try:
from optparse import OptionParser
except ImportError:
try:
from optik import OptionParser
except ImportError:
raise ImportError, ‘Requires Python 2.3 or the Optik option parsing library.’
parser = OptionParser()
parser.add_option(“-f”,”–file”,dest=”name”,
help=”帮助信息”,metavar=”FILE”)
parser.add_option(“-q”,”–quit”,
action =”store_false”,dest=”verbose”,default=”True”,
help=”帮助信息”)
(options,args) = parser.parse_args()
再进行 python  get-parser-cn.py -h 的时候,可爱的中文就出来了

今天在使用OptionParser的时候,在填写帮助信息的时候使用了中文,却发现报了一系列的错误

代码如下

#!/usr/bin/env python

#coding:UTF-8

import sys

from optparse import OptionParser

parser = OptionParser()

parser.add_option(“-f”,”–file”,dest=”name”,help=”帮助信息”,metavar=”FILE”)

(options,args) = parser.parse_args()

错误信息

File “get-parser-cn.py”, line 23, in <module>

(options,args) = parser.parse_args()

File “/usr/lib/python2.5/optparse.py”, line 1387, in parse_args

stop = self._process_args(largs, rargs, values)

File “/usr/lib/python2.5/optparse.py”, line 1431, in _process_args

self._process_short_opts(rargs, values)

File “/usr/lib/python2.5/optparse.py”, line 1538, in _process_short_opts

option.process(opt, value, values, self)

File “/usr/lib/python2.5/optparse.py”, line 774, in process

self.action, self.dest, opt, value, values, parser)

File “/usr/lib/python2.5/optparse.py”, line 796, in take_action

parser.print_help()

File “/usr/lib/python2.5/optparse.py”, line 1657, in print_help

file.write(self.format_help().encode(encoding, “replace”))

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 124: ordinal not in range(128)

和 @smallfish9 同学 讨论了一番,并搜索了一些资料后,找到了解决方案如下

import sys

reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 ,可以注释掉来试试,会提示没有这个setdefaultencoding方法的

完整的代码

#!/usr/bin/env python

#coding:UTF-8

import sys

from optparse import OptionParser

reload(sys)

print sys.getdefaultencoding()

sys.setdefaultencoding(‘utf-8′)

parser = OptionParser()

parser.add_option(“-f”,”–file”,dest=”name”,

help=”帮助信息”,metavar=”FILE”)

(options,args) = parser.parse_args()

再进行 python  get-parser-cn.py -h 的时候,可爱的中文就出来了

Leave a Reply