python/flask:TypeError:需要一个整数(get type str)

python/flask:TypeError:需要一个整数(get type str),python,flask,Python,Flask,我是python和flask的新手。我正在努力完成烧瓶教程。我遇到了一个我无法理解的错误。我(我想)已经尽全力寻找了一个解决方案,但我找不到一个适合我的问题的。我已卸载并重新安装了flask。我甚至创建了一个新的venv并重新开始,但没有任何效果 我正在尝试构建一个简单的web表单应用程序。我创建了一个表单,如: from flask_wtf import Form from wtforms import StringField, BooleanField from wtforms.va

我是python和flask的新手。我正在努力完成烧瓶教程。我遇到了一个我无法理解的错误。我(我想)已经尽全力寻找了一个解决方案,但我找不到一个适合我的问题的。我已卸载并重新安装了flask。我甚至创建了一个新的venv并重新开始,但没有任何效果

我正在尝试构建一个简单的web表单应用程序。我创建了一个表单,如:

from flask_wtf import Form  
from wtforms import StringField, BooleanField  
from wtforms.validators import DataRequired

class LoginForm(Form):
    openid = StringField('openid', validators=[DataRequired()])
    remember_me = BooleanField('remember_me', default=False)
导入LoginForm时,会出现错误

TypeError: an integer is required (got type str)
完整的堆栈跟踪如下所示:

C:\microblog\flask\Scripts\python.exe C:/microblog/run.py
Traceback (most recent call last):
  File "C:/microblog/run.py", line 2, in <module>
    from app import app
  File "C:\microblog\app\__init__.py", line 6, in <module>
    from app import views
  File "C:\microblog\app\views.py", line 5, in <module>
    from .forms import LoginForm
  File "C:\microblog\app\forms.py", line 3, in <module>
    from flask_wtf import Form
  File "C:\microblog\flask\lib\site-packages\flask_wtf\__init__.py", line 15, in <module>
    from .form import Form
  File "C:\microblog\flask\lib\site-packages\flask_wtf\form.py", line 15, in <module>
    from .i18n import translations
  File "C:\microblog\flask\lib\site-packages\flask_wtf\i18n.py", line 12, in <module>
    from flask_babel import get_locale
  File "C:\microblog\flask\lib\site-packages\flask_babel\__init__.py", line 21, in <module>
    from babel import dates, numbers, support, Locale
  File "C:\microblog\flask\lib\site-packages\babel\dates.py", line 28, in <module>
    from babel.util import UTC, LOCALTZ
  File "C:\microblog\flask\lib\site-packages\babel\util.py", line 278, in <module>
    from babel import localtime
  File "C:\microblog\flask\lib\site-packages\babel\localtime\__init__.py", line 21, in <module>
from babel.localtime._win32 import _get_localzone
  File "C:\microblog\flask\lib\site-packages\babel\localtime\_win32.py", line 18, in <module>
    tz_names = get_global('windows_zone_mapping')
  File "C:\microblog\flask\lib\site-packages\babel\core.py", line 58, in get_global
    _global_data = pickle.load(fileobj)
TypeError: an integer is required (got type str)
C:\microblog\flask\Scripts\python.exe C:/microblog/run.py
回溯(最近一次呼叫最后一次):
文件“C:/microblog/run.py”,第2行,在
从应用程序导入应用程序
文件“C:\microblog\app\\uuuuu init\uuuuuuu.py”,第6行,在
从应用程序导入视图
文件“C:\microblog\app\views.py”,第5行,在
from.forms导入LoginForm
文件“C:\microblog\app\forms.py”,第3行,在
来自WASKU wtf进口表格
文件“C:\microblog\flask\lib\site packages\flask\u wtf\\uuuu init\uuuuu.py”,第15行,在
from.form导入表单
文件“C:\microblog\flask\lib\site packages\flask\u wtf\form.py”,第15行,在
从.i18n导入翻译
文件“C:\microblog\flask\lib\site packages\flask\u wtf\i18n.py”,第12行,在
从flask_babel导入获取语言环境
文件“C:\microblog\flask\lib\site packages\flask\u babel\\uuuu init\uuuuu.py”,第21行,在
从babel导入日期、编号、支持、区域设置
文件“C:\microblog\flask\lib\site packages\babel\dates.py”,第28行,在
从babel.util导入UTC、LOCALTZ
文件“C:\microblog\flask\lib\site packages\babel\util.py”,第278行,在
从babel导入本地时间
文件“C:\microblog\flask\lib\site packages\babel\localtime\\uuuu init\uuuuu.py”,第21行,在
从babel.localtime.\u win32导入\u获取\u localzone
文件“C:\microblog\flask\lib\site packages\babel\localtime\\u win32.py”,第18行,在
tz\u names=get\u global('windows\u zone\u mapping'))
文件“C:\microblog\flask\lib\site packages\babel\core.py”,第58行,在get\U global中
_全局_data=pickle.load(fileobj)
TypeError:需要一个整数(获取类型str)

非常感谢您的帮助,这让我快发疯了

和你差不多在同一时间遇到了这个完全相同的问题-我非常兴奋地看到上面有一个stackoverflow页面,结果却发现它没有得到回答。我似乎已经找到了解决办法,但我要提醒大家的是,我决不是专家,明天可能会发现这破坏了其他东西

在core.py的依赖关系中,我发现根据您正在运行的python版本,/babel/_compat.py导入cPickle或pickle,这就是core.py作为pickle导入的内容

我将/babel/_compat.py中的第22行从

import cPickle as pickle

你瞧,一切都在运转


同样,这可能破坏了很多我不知道的东西,但从我所读到的来看,cPickle似乎更快,所以这只会牺牲速度,不应该改变功能。如果您只是在学习flask教程,我怀疑这会是一个问题。

我的/babel/\u compat.py版本已经有了导入pickle,所以我决定尝试卸载并重新安装flask babel。卸载后,出于好奇,我运行了我的应用程序——它成功了!我希望我能理解为什么,但我现在被解除了限制。

这是python包索引上babel 2.0包中的构建错误

总之,包中包含一个pickle文件
babel/global.dat
,python 3无法读取该文件,因为它是由在python 2下运行的脚本创建的

我通过从github而不是github问题中建议的PyPI安装解决了这个问题:

pip install git+https://github.com/mitsuhiko/babel.git@2.0

我在Windows上使用Python3.4,得到了同样的错误

我解决问题的方法是卸载flask babel模块,如下所示:

flask\Scripts\pip uninstall flask-babel
在此之后,babel模块仍然正确导入:

import babel

唯一的问题是我不明白这背后的道理。

谢谢你的建议,@user26379。它为我指明了最终解决问题的方向(见下面我的回答)。
import babel