michaelliao / awesome-python3-webapp

小白的Python入门教程实战篇
https://liaoxuefeng.com/books/python/
GNU General Public License v3.0
2.4k stars 2.8k forks source link

Day3 orm.py Undefined variable 'StandardError' #54

Open pretendhigh opened 4 years ago

pretendhigh commented 4 years ago

python 版本 Python 3.7.3 vscode 中显示 orm.py 报错: Undefined variable 'StandardError' class ModelMetaclass(type):

def __new__(cls, name, bases, attrs):
    if name=='Model':
        return type.__new__(cls, name, bases, attrs)
    tableName = attrs.get('__table__', None) or name
    logging.info('found model: %s (table: %s)' % (name, tableName))
    mappings = dict()
    fields = []
    primaryKey = None
    for k, v in attrs.items():
        if isinstance(v, Field):
            logging.info('  found mapping: %s ==> %s' % (k, v))
            mappings[k] = v
            if v.primary_key:
                # 找到主键:
                if primaryKey:
                    raise StandardError('Duplicate primary key for field: %s' % k)

stackoverflow 中有个回答, "exception StandardError which was removed in Python 3.",是这样的吗?

fgetwewr commented 4 years ago

The StandardError class is removed in Python 3. It was the base class for built-in exceptions, and it proved to be an unnecessary link in almost any exception’s inheritance chain.

The recommended fixer will replace all uses of StandardError with Exception. Review the result to check if this is correct.

Some code might rely on the name of an exception class, or on exceptions not derived from StandardError, or otherwise handle StandardError specially. You’ll need to handle these casses manually.

xieyupengzZ commented 4 years ago

在Python 3里,StandardError已经被取消了,使用Exception替代。