O.K.,我是從Perl到Python的,我沒有太多的Python經驗,所以對於那些對Python更有經驗的人來說,這看起來很明顯。爲什麼這個變量不可見?
無論如何,我只是加載一個配置文件,然後,作爲一個自檢,打印加載的值。代碼如下:
#!/home/y/bin/python2.7
import logging
import sys
import datetime
import yaml
def main(self):
#initialize the logger
logger = logging.getLogger(self.granularity)
log_fh = logging.FileHandler(filename='/home/logs/pipelineTest/pipelineTest' + datetime.datetime.now().strftime('%Y%m%d_%H%M') + '.log', mode='w')
logger.addHandler(log_fh)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)-6s: %(name)s - %(levelname)s - %(message)s')
log_fh.setFormatter(formatter)
#read configuration file
if sys.argv[1]:
ymlFH = open(sys.argv[1])
else:
ymFH = open('/home/conf/pipelineTest/runPipeline.yml')
confDict = yaml.load(ymlFH)
if __name__ == '__main__':
#self-test code
for key, value in confDict.iteritems():
print 'Key is: ' + key + '\n'
print 'value is: ' + confDict[key] + '\n'
我遇到的錯誤是:
Traceback (most recent call last):
File "./runPipeline.py", line 30, in <module>
for key, value in confDict.iteritems():
NameError: name 'confDict' is not defined
我敢解釋的名稱「confDict」已經超出了範圍。我不明白爲什麼它超出了範圍。
這實際上並不像你想象的那樣是一個python特定的問題。即使在perl中,你也必須調用函數(或子)來執行代碼。這就是說,如果你不使用超級可怕的「非嚴格模式」,Perl中的範圍應該是相同的概念 – jdi