【问题标题】:python 3 import TypeError errorpython 3导入TypeError错误
【发布时间】:2015-10-21 04:46:24
【问题描述】:

我遇到了一个奇怪的应用启动错误,想知道是否有人知道如何调试/解决它。

我正在使用 python 3 运行一个 Flask 应用程序。我通过运行:python manage.py runserver 并生成下面的堆栈跟踪:

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)

问题是,当我在调试器中运行它并设置断点时,问题就消失了。但是如果我在没有调试的情况下运行它,问题就存在了。

如需进一步参考,由 manage.py 代码/文件调用的 create_tables() 函数如下所示:

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()

还有Weekdayweekday_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 更灵活一点,以便它可以接受值字典,而不仅仅是valuedescription。除此之外,我什么也没改变。

有什么想法吗?由于调试它的行为修复了 的事情,我不知道如何去追查问题的根源。

提前致谢。

【问题讨论】:

    标签: python python-3.x flask flask-sqlalchemy


    【解决方案1】:

    该错误具有误导性。

    查看我在原始问题中链接到的gist

    方法register_with_psycopg() 仅在枚举类型首先在数据库中创建时才有效。我在创建类型之前调用了该方法。通过在应用启动期间更改事物的顺序,错误就消失了。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多