flask pip utf-8 编码报错处理

Posted onhacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask pip utf-8 编码报错处理相关的知识,希望对你有一定的参考价值。

今天在公司里安装flask的时候,一切正常,可以正常import flask

但是回到家里,却莫名其妙的报错了。

Exception:
Traceback (most recent call last):
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\compat\\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xb6 in position 33: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\basecommand.py", line 216, in main
    status = self.run(options, args)
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\commands\\install.py", line 342, in run
    prefix=options.prefix_path,
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\req\\req_set.py", line 784, in install
    **kwargs
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\req\\req_install.py", line 878, in install
    spinner=spinner,
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\utils\\__init__.py", line 676, in call_subprocess
    line = console_to_str(proc.stdout.readline())
  File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\compat\\__init__.py", line 75, in console_to_str
    return s.decode(\'utf_8\')
UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xb6 in position 33: invalid start byte

报错大概是这样的,总之我开始是没怎么看报错信息,然后去百度查了一大堆。结果发现除了有一位csdn的博主:nankaizhl的报错可能和我差不多,其他就没怎么找到,包括stackoverflow。

也不知道今天是吃错药了还是咋的,我竟然没有立即放弃,按照nankaizhl的一些说明,改了以后发现没有用,直接报错了。

python3里面好像都没有reload这个函数了。

难道我就只能在公司电脑里学python?

我只能硬着头皮去啃报错的traceback了。

我们仔细看下。

python先是在解决某个异常后,又发现了一个异常。有意思的是,另外一个异常,往回追溯,回到了同一个文件。

File "c:\\users\\ruby\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\pip\\compat\\__init__.py"

没办法,只能带着恐惧来看python安装包里的py代码了。
但python解释器很有好的给出了报错行数。
我把相关行截出来。
if sys.version_info >= (3,):
    def console_to_str(s):
        try:
            return s.decode(sys.__stdout__.encoding) #
        except UnicodeDecodeError:
            return s.decode(\'utf-8\') #

报错的2个#的那一行。

这个语法是一个异常处理的,难怪会报错来自同一个文件,这里很简单的说明了如果不能正常编码的话,就用utf-8编码。

然后看traceback里的信息,表明,即使用utf-8编码也不行,对于中国电脑来收,一般就是路径里面有中文。

虽说我们也可以找一下哪些路径有中文,但我没这个水平。

很自然的一个修改的是,把这个改成下面这样,用gbk的中文编码。

if sys.version_info >= (3,):
    def console_to_str(s):
        try:
            return s.decode(sys.__stdout__.encoding)
        except UnicodeDecodeError:
            return s.decode(\'gbk\') #

未免改后有问题,我在后面加了一个#。

结果正常了。

补充一点还可能出问题的是,pip安装flask报错后,你再次pip install flask,会返回你安装成功的信息。

好像也不是安装成功,更准确的说法是没有报错,但这时你import flask会报错,如下:

我这里的报错显示的很清晰,没有markupsafe._compat这个module。

所以我本来是想先pip uninstall flask,但是很遗憾,这样并不能把MarkupSafe卸载掉。

你需要pip uninstall MarkupSafe才行,然后把上面的编码改成gbk后,再pip install flask。

这样就没问题了,然后我们就一起去学习flask吧。

 

以上是关于flask pip utf-8 编码报错处理的主要内容,如果未能解决你的问题,请参考以下文章

pip install flask-mongoengine报错

python3读文件编码错误怎么办

Python pip安装Scrapy,报错Twisted

mysql存储emoji表情报错的处理方法更改编码为utf8mb4

在flask框架中,对wtforms的SelectMultipleField的一个报错处理

Java 代码连数据库报错