Python:使用嵌套类时的NameError

Ale*_*der 1 python

我遇到了以下错误:

NameError: name 'JsonCleaner' is not defined
Run Code Online (Sandbox Code Playgroud)

导致错误的行是字典中的第一对ERROR_CODES_MAPPING_DICT(参见下面的代码):

from sshop.engine.models import WrongJsonError

class JsonCleaner:


    class NormalizeError(Exception):

        ERROR_NO_CODE = 0
        ERROR_TYPE_MISMATCH = 1
        ERROR_WRONG_VALUE = 2
        ERROR_LACK_OF_FIELD = 3

        def __init__(self, error_desc, error_code=ERROR_NO_CODE):
            self.error_desc = error_desc
            self.error_code = error_code

        def __unicode__(self):
            return repr(self.error_desc)


    # .... some methods ........


    ERROR_CODES_MAPPING_DICT = {
        # Line where exception is raised:
        JsonCleaner.NormalizeError.ERROR_NO_CODE:       WrongJsonError.NO_ERROR, 
        JsonCleaner.NormalizeError.ERROR_LACK_OF_FIELD: WrongJsonError.ERROR_LACK_OF_FIELD,
        JsonCleaner.NormalizeError.ERROR_TYPE_MISMATCH: WrongJsonError.ERROR_TYPE_MISMATCH,
        JsonCleaner.NormalizeError.ERROR_WRONG_VALUE:   WrongJsonError.ERROR_WRONG_VALUE, 
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ign*_*ams 5

类名不能在类范围内使用,因为在完全定义类之前,名称实际上并未绑定.将dict文字移到类范围之外.

JsonCleaner.ERROR_CODES_MAPPING_DICT = ...
Run Code Online (Sandbox Code Playgroud)