我在Python 3.4中使用configparser读取配置文件时出现一个唠叨的错误。该代码最初是为Python 2.7编写的,但我不再使用它,我只使用python 3.4。我不希望任何向后兼容python 2.7。只有只有3.4蟒使用ConfigParser在Python中读取配置文件的错误3,4
Error reading set file ./sets/diagnostic1.set
以上是我得到的错误,当我运行这段代码
from configparser import *
import re, os, ctypes, csv, calendar, datetime
from time import *
from ctypes import *
# Reads the config set file
def readSetFile(file):
try:
#config = RawConfigParser()
#config.readfp(FakeSecHead(open(file))) # readfp is deprecated from configparser
config = ConfigParser(delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=';', interpolation=None)
config.read_file(FakeSecHead(open(file)))
return config
except:
return False
# Reads fake or modified Section head in the config file
class FakeSecHead(object):
def __init__(self, fp):
self.fp = fp
self.sechead = '[main]\n'
def readline(self):
if self.sechead:
try:
return self.sechead
finally:
self.sechead = None
else:
line = self.fp.readline()
return re.sub('^SECTION_3.*$', '[additional]', line)
的 “diagnostic1.set” 文件,其中包含了CONFIGS
COMMENTS=Click view comments.
SECTION_1=################# General Settings #################
FRAMEWORK_CONFIG=./experts/config/TesingConfig.xml
USE_ORDER_WRAPPER=0
UI_FONT_SIZE=12
UI_ERROR_INFO_COLOR=0
UI_CUSTOM_INFO_COLOR=0
SECTION_2=############## Common Strategy Settings ##############
OPERATIONAL_MODE=1
STRATEGY_INSTANCE_ID=25
MAX_DRAWDOWN_PERCENT=100.00000000
MAX_SPREAD_PIPS=100.00000000
ENABLE_WFO=0
WFO_WINDOW_SIZE=0
PARAMETER_SET_POOL=0.00000000
DISABLE_COMPOUNDING=0
USE_INSTANCE_BALANCE=0
INIT_INSTANCE_BALANCE=0.00000000
TIMED_EXIT_BARS=31
ATR_AVERAGING_PERIOD=3
MAX_OPEN_ORDERS=1
SECTION_3=############## Additional Strategy Settings ##############
OPEN_ATR_MULTIPLIER=0.41000000
OPEN_ATR_MULTIPLIER,F=1
OPEN_ATR_MULTIPLIER,1=0.20
OPEN_ATR_MULTIPLIER,2=0.01
OPEN_ATR_MULTIPLIER,3=0.60
TRADE_CONFIDENCE=2
所以当我测试运行python 3.4控制台中的代码时,我得到“False”,表示它无法读取配置集文件。
Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Jun 4 2015, 15:29:08)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from configparser import *
>>> import re, os, ctypes, csv, calendar, datetime
>>> from time import *
>>> from ctypes import *
>>>
>>> def readSetFile(file):
... try:
... #config = RawConfigParser()
... #config.readfp(FakeSecHead(open(file))) # readfp will be deprecated from configparser edited by developer
... config = ConfigParser(delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=';', interpolation=None)
... config.read_file(FakeSecHead(open(file)))
... return config
... except:
... return False
>>>
>>> class FakeSecHead(object):
... def __init__(self, fp):
... self.fp = fp
... self.sechead = '[main]\n'
... def readline(self):
... if self.sechead:
... try:
... return self.sechead
... finally:
... self.sechead = None
... else:
... line = self.fp.readline()
... return re.sub('^SECTION_3.*$', '[additional]', line)
...
>>> readSetFile('./sets/diagnostics1.set')
False
>>>
任何帮助能够读取配置集文件的方式。我有相同格式的数百个配置集文件。但我似乎无法读取Python中的文件3.4
我已经成功修改了Patrick MAUPIN的代码片段,它能够读取配置集文件,但现在会在相同部分中引发关键错误代码
numSystemsInPortfolio = len(setFilePaths)
SettingsArrayType = numSystemsInPortfolio * ctypes.POINTER(c_double)
settings = SettingsArrayType()
for i in range(numSystemsInPortfolio):
settings[i] = SettingsType()
settings[i][IS_BACKTESTING] = True
settings[i][DISABLE_COMPOUNDING] = float(sets[i].mainParams["DISABLE_COMPOUNDING"]['value']) if sets[
i].content.has_option('main', 'DISABLE_COMPOUNDING') else 0
settings[i][TIMED_EXIT_BARS] = float(sets[i].mainParams["TIMED_EXIT_BARS"]['value']) if sets[
i].content.has_option('main', 'TIMED_EXIT_BARS') else 0
settings[i][ORIGINAL_EQUITY] = config.getfloat("account", "balance")
.....
.....
.....
.....
.....
File "mycode.py", line 222, in main
i].content.has_option('main', "DISABLE_COMPOUNDING") else 0
KeyError: 'DISABLE_COMPOUNDING'
你可以尝试调试它能走多远加入'在'readline()'后面打印(行)'。这是否告诉你问题在哪里?另外,如果你没有发现错误(使用'readSetFile'中的'try:except'),那么会抛出什么错误?你可以发布堆栈跟踪吗? –
什么是'SettingsType'?问题似乎在那里。或者'mainParams'? – strubbly