今天在使用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 的时候,可爱的中文就出来了