Python 格式化大字符串时出错-如何检测错误?

Python 格式化大字符串时出错-如何检测错误?,python,python-2.7,string-formatting,Python,Python 2.7,String Formatting,我是Python新手,目前正在研究大型字符串格式,这是我正在使用的库所需要的 问题发生的原因是我不知道在大字符串格式中错误发生的确切位置。更确切地说,我得到了形式上的一个错误 Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2731, in run_code exec code_obj in self.us

我是Python新手,目前正在研究大型字符串格式,这是我正在使用的库所需要的

问题发生的原因是我不知道在大字符串格式中错误发生的确切位置。更确切地说,我得到了形式上的一个错误

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2731, in run_code
    exec code_obj in self.user_global_ns, self.user_ns
  File "<ipython-input-3-f6a3bb7fe2f9>", line 13, in <module>
    trainCV = trainCV % (train_params)
ValueError: unsupported format character ',' (0x2c) at index 2726 
我试图格式化为字符串的Conv_Constructor.yaml文件如下

#  ---------- INPUTS ---------
#
#        batch_size
#        output_channels_h2
#        conv_kernel_size
#        pool_size
#        stride_size
#        output_channels_h3
#        num_classes
#        valid_stop
#        test_start
#        test_stop
#        max_epochs

##################################################################

!obj:pylearn2.train.Train {
    dataset: !obj:pylearn2.official_train_data.load_data {
        start: 0,
        stop:  4000
      # one_hot: 1,
    },

    model: !obj:pylearn2.models.mlp.MLP {
        batch_size: %(batch_size)i,
        input_space: !obj:pylearn2.space.Conv2DSpace {
            shape: [32, 32],
            num_channels: 1,
            axes = ('b',0,1,'c')
        },

        layers: [ !obj:pylearn2.models.mlp.ConvRectifiedLinear {
                     layer_name: 'h2',
                     output_channels: %(output_channels_h2)i,
                     #params : !pkl: 'dae_layer_1_weights.plk',
                     irange: .05,

                     kernel_shape: [%(conv_kernel_size)i, %(conv_kernel_size)i],

                     pool_shape: [%(pool_size)i, %(pool_size)i],

                     pool_stride: [%(stride_size)i, %(stride_size)i],

                     max_kernel_norm: 1.9365
                 }, !obj:pylearn2.models.mlp.ConvRectifiedLinear {
                     layer_name: 'h3',
                     output_channels: %(output_channels_h3)i,
                     #params : !pkl: 'dae_layer_1_weights.plk',
                     irange: .05,
                     kernel_shape: %(conv_kernel_size)i, %(conv_kernel_size)i],

                     pool_shape:[%(pool_size)i, %(pool_size)i],

                     pool_stride: [%(stride_size)i, %(stride_size)i],
                     max_kernel_norm: 1.9365


                 },  !obj:pylearn2.models.mlp.Softmax {
                     max_col_norm: 1.9365,
                     layer_name: 'y',
                     n_classes: %(num_classes)i,
                     istdev: .05
                 }
                ],
    },

    algorithm: !obj:pylearn2.training_algorithms.sgd.SGD {
        batch_size: %(batch_size)i,
        learning_rate: .01,
        init_momentum: .5,
        monitoring_dataset:
            {
                'valid' : !obj:pylearn2.official_train_data.load_data {
                         start: 4000,
                         stop:  %(valid_stop)i
                         #one_hot: 1,
                },
                'test'  :  !obj:pylearn2.official_train_data.load_data {
                         start: %(test_start),
                         stop:  %(test_stop)
                         #one_hot: 1,
                }
            },

        cost: !obj:pylearn2.costs.cost.SumOfCosts { costs: [
            !obj:pylearn2.costs.cost.MethodCost {
                method: 'cost_from_X'
            }, !obj:pylearn2.costs.mlp.WeightDecay {
                coeffs: [ .00005, .00005, .00005 ]
            }
            ]
        },
        termination_criterion: !obj:pylearn2.termination_criteria.And {
            criteria: [
                !obj:pylearn2.termination_criteria.MonitorBased {
                    channel_name: "valid_y_misclass",
                    prop_decrease: 0.50,
                    N: 50
                },
                !obj:pylearn2.termination_criteria.EpochCounter {
                    max_epochs: %(max_epochs)i
                },
            ]
        },
    },

    extensions:
        [ !obj:pylearn2.train_extensions.best_params.MonitorBasedSaveBest {
             channel_name: 'valid_y_misclass',
             save_path: "%(save_path)s/convolutional_network_best.pkl"
        }, !obj:pylearn2.training_algorithms.sgd.MomentumAdjustor {
            start: 1,
            saturate: 10,
            final_momentum: .99
        }
    ]
}

通过单独处理每一行而不是整个字符串,可以更容易地定位错误。 替换

您将获得以下输出:

78
                         start: %(test_start),
这意味着您的字符串格式化没有很好地工作(在本例中,我认为括号缺失后有
I
)。以这种方式调试您的大字符串,您应该有一个工作代码

完成后,您可以通过加入列表进行打印:

print '\n'.join(t1)

我不确定你所说的“探测线”是什么意思;异常为您提供字符偏移量;您的文本文件在该偏移量处包含什么?很可能您有类似于
%、
%2、
或类似的序列,以
%
百分比字符开头,后跟有效的格式控制代码和逗号。谢谢您的好主意!从现在起,我将使用这样一个脚本来单独处理每一行。您好,我正在尝试将此代码改编为另一个我遇到的情况,但我得到了一个错误!代码中缺少什么吗?例如,“enumerate()”是否正确?不应该被列举(TrainCV)?是的,这当然是正确的。不知怎么忘了。
trainCV = trainCV.split('\n')
t1=[]
try:
    for i, t in enumerate(trainCV):
        t1.append(t % (train_params))
except :
    print 'Error in line {}:'.format(i)
    print t[i]
    raise
78
                         start: %(test_start),
print '\n'.join(t1)