class DefaultConfig(object):
class S3(object):
DATA_ROOT = 's3://%(bucket_name)s/NAS'
DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DefaultConfig.S3.DATA_ROOT)
上面的代码给出了以下错误。
File "./s3Utils.py", line 5, in <module>
from InfraConfig import InfraConfig as IC
File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 4, in <module>
class DefaultConfig(object):
File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 6, in DefaultConfig
class S3(object):
File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 14, in S3
DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DefaultConfig.S3.DATA_ROOT)
NameError: name 'DefaultConfig' is not defined
为什么找不到DefaultConfig.S3.DATA_ROOT 此外,这是我尝试编写结构化配置并重用DefaultConfig的值。有没有办法在不编写yml文件的情况下执行此操作?
答案 0 :(得分:2)
无法找到DefaultConfing
,因为DefaultConfig
在创建S3
时尚未定义。
请记住,班级是对象。因为有对象,这意味着它们需要实例化。 Python在其定义的末尾实例化一个类,因此在globals中注册它。由于类定义尚未完成,因此无法使用DefaultConfig
名称。
答案 1 :(得分:1)
你应该使用它而不带任何前缀:
class DefaultConfig(object):
class S3(object):
DATA_ROOT = 's3://%(bucket_name)s/NAS'
DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DATA_ROOT)
print DefaultConfig.S3.DATA_LOCATION
返回:
> s3://%(bucket_name)s/NAS/%(instrument_id)s/%(run_id)s