<p>您需要做的是正确地规范化值:</p>
<pre><code>>>> from decimal import Decimal
>>> Decimal('1 038,00 USD'.rstrip('USD').replace(' ','').replace(',','.'))
Decimal('1038.00')
</code></pre>
<p>始终使用<code>Decimal</code>表示货币值。这避免了数字不准确的问题,瘟疫浮动,可以花费你美分。你知道吗</p>
<hr/>
<p>要处理列表,请过滤掉那些不是货币值的字符串(在本例中是那些不以<code>USD</code>结尾的字符串)(可能还有另一种更适合XML输入的方法),然后转换其余的字符串:</p>
<pre><code>input_values = ['.ac.tz', 'Tanzania', '135,00 USD', '135,00 USD', '0,00 USD', ' Order']
monetary_values = [Decimal(v.rstrip('USD').replace(' ','').replace(',','.'))
for v in input_values if v.endswith('USD')]
</code></pre>
<p>结果:</p>
<pre><code>>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
</code></pre>
<p>或者您可以尝试转换每个项目并忽略引发异常的项目:</p>
<pre><code>import decimal
from decimal import Decimal
input_values = ['.ac.tz', 'Tanzania', '135,00 USD', '135,00 USD', '0,00 USD', ' Order']
monetary_values = []
for v in input_values:
try:
monetary_values.append(Decimal(v.rstrip('USD').replace(' ','').replace(',','.')))
except decimal.InvalidOperation:
pass
</code></pre>
<p>这也导致:</p>
<pre><code>>>> monetary_values
[Decimal('135.00'), Decimal('135.00'), Decimal('0.00')]
</code></pre>