В вашем коде вы ссылаетесь на R[Tam + 1]
, которая является строкой, сообщающей об ошибке. Ранее вы определяете Tam
как равное 3, а R
как равное [Tam + 2]
, что создает список, содержащий один элемент, Tam + 2
или, поскольку вы ранее определили Tam
, 5. В других словами, R
это список, который содержит один элемент, 5.
Далее, вы пытаетесь сослаться на определенный элемент в R
- Tam + 1
, или 4. У вас должно быть пять элементов. в R
для существования R[4]
, поэтому он возвращает ошибку IndexError
, потому что указанный вами индекс не приводит к правильному элементу.
Чтобы это исправить, мы должны точно знать, что вы хотите здесь сделать. Если вы хотите добавить элемент Tam + 1
в список, вы должны сделать R.append(Tam + 1)
. Если вы хотите установить четвертый элемент в списке равным нулю, вы должны сделать R[Tam + 1] = 0
; тем не менее, в списке нет четвертого элемента, который можно было бы установить равным нулю.
Они не нужны для исправления вашей программы, но вы можете прочитать PEP8, руководство по стилю для Python. В частности, я отмечаю, что вы импортируете пакет, который вам не нужен (хотя, конечно, он может понадобиться вам позже в вашей программе; я не знаю), вы определяете переменные с однобуквенными заглавными именами, когда в идеале вы бы использовали более длинное и описательное имя. У вас также есть имена, такие как Rf
, когда в идеале это будет r_f
(и более описательный). Вы также можете добавить комментарии к своему коду, чтобы объяснить, что происходит. Эти изменения помогут другим и вам самим прочитать ваш код и найти проблемы или добавить его в код.
Благодаря бдительному DBA мы решили проблему.
Отметьте размер "@Message" параметра. log4net берет предположение в том, как преобразовать тип и (я думаю), преобразование его к nvarchar даже при том, что столбец является varchar. Это - грандиозное предприятие, потому что nvarchar имеет макс. размер 4 000, в то время как varchar имеет макс. размер 8 000.
DBA видел ошибки, как описано в этой статье KB: http://support.microsoft.com/kb/827366
Я изменил размер на 4 000, и все работает без помех.
Надо надеяться, это поможет кому-то еще избежать той же проблемы.
Удачи!
</configSections>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1"/>
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<connectionString value="Data Source=yourservername;initial Catalog=Databasename;User ID=sa;Password=xyz;"/>
<commandText value="INSERT INTO Log4Net ([Date], [Thread], [Level], [Logger], [Message],
[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value="@thread"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread ip=%property{ip}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>