我有一个奇怪的应用程序启动错误,想知道是否有人可能知道如何调试/解决它。你知道吗
我正在用python3运行一个Flask应用程序。我通过运行:python manage.py runserver
启动,并生成下面的stacktrace:
Traceback (most recent call last):
File "/projectbase/manage.py", line 19, in <module>
create_tables()
File "/projectbase/myproject/__init__.py", line 15, in create_tables
from myproject.models.util import Weekday, weekday_type
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 742, in __exit__
File "<frozen importlib._bootstrap>", line 742, in <genexpr>
TypeError: an integer is required (got type NoneType)
问题是,当我在调试器中运行它并设置断点时,问题就消失了。但是如果我不调试就运行它,问题就存在了。
有关进一步的参考,请参阅调用的create_tables()
函数管理.py代码/文件如下所示:
from myproject.app import app
from myproject.app import db
def create_tables():
from myproject.models.util import Weekday, weekday_type
from myproject.models.activity import Activity, activities_tags, Occurrence, Tag
db.create_all()
进一步的Weekday
和weekday_type
代码如下所示:
from myproject.app import db
from myproject.models.enum import DeclEnum
class Weekday(DeclEnum):
Sunday = 'Sunday', {'offset': 0}
Monday = 'Monday', {'offset': 1}
Tuesday = 'Tuesday', {'offset': 2}
Wednesday = 'Wednesday', {'offset': 3}
Thursday = 'Thursday', {'offset': 4}
Friday = 'Friday', {'offset': 5}
Saturday = 'Saturday', {'offset': 6}
weekday_type = Weekday.db_type(metadata=db.metadata)
weekday_type.register_with_psycopg(db.engine)
我使用的DeclEnum
类型基本上就是从这个gist复制的。你知道吗
我对代码所做的唯一调整是使DeclEnum
更加灵活,这样它就可以接受一个值字典,而不仅仅是value
和description
。除此之外我什么也没变。你知道吗
你知道这是怎么回事吗?由于调试它的行为解决了问题,我不知道如何着手弄清问题的真相。你知道吗
提前谢谢。你知道吗
这个错误有误导性。你知道吗
看看我在原始问题中链接到的gist
方法
register_with_psycopg()
仅在枚举类型首先在数据库中创建时有效。我是在创建类型之前调用该方法的。通过在应用程序启动期间更改事物的顺序,错误消失了。你知道吗相关问题 更多 >
编程相关推荐