<p>您的代码有两个主要问题。你知道吗</p>
<ol>
<li>您正在尝试对字符串数据调用<code>sum()</code>。你知道吗</li>
<li>您正在尝试将数值格式化为字符串。你知道吗</li>
</ol>
<h2>固定总和</h2>
<p>您想要对一个可数的数值求和,因为字符串值的求和是未定义的。通过对每个值调用<code>int()</code>(使用<code>map()</code>函数)可以将字符串值转换为整数。你知道吗</p>
<h3>示例:</h3>
<pre><code>>>> sum(["1", "2", "3"])
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> sum([1, 2, 3])
6
map(int, ["1", "2", "3"])
[1, 2, 3]
>>> sum(map(int, ["1", "2", "3"]))
6
</code></pre>
<h3>应用到您的代码</h3>
<p>您真的要对<code>dato[2]</code>的个位数求和吗?它看起来像这样:</p>
<pre><code>>>> dato = ['PIN4', 'HOIAQKS02C4SWQ', '1761']
>>> sum(map(int, dato[2])) # 1 + 7 + 6 + 1
15
</code></pre>
<h2>修复字符串格式</h2>
<p>不能将整数追加到字符串(请参见<a href="https://stackoverflow.com/questions/2847386/string-and-integer-concatenation">Python String and Integer concatenation</a>)。你知道吗</p>
<p>解决方案是在串联之前将整数转换为字符串,或者在字符串中格式化整数。在您的案例中,解决方案如下所示:</p>
<ol>
<li><p>转换为字符串:</p>
<pre><code>archivo3.write("PIN1=" + str(dato_2_sum) + "\n")
</code></pre></li>
<li><p>使用字符串格式:</p>
<pre><code>archivo3.write("PIN1=%d\n" % dato_2_sum)
</code></pre></li>
<li><p>使用newstyle格式:</p>
<pre><code>archivo3.write("PIN1={}\n".format(dato_2_sum)
</code></pre></li>
</ol>