<p>我听到你说的是你执行这个代码:</p>
<pre><code>try:
accounts_category = json_data['primaryTopic']['Accounts']['AccountCategory']
except (KeyError, TypeError) as e:
accounts_category = ''
</code></pre>
<p>后来的<code>accounts_category</code>(或者其他一些用这种方式处理的变量)是<code>None</code>,而不是<code>''</code>。你知道吗</p>
<p>显然,发生这种情况是因为没有出现错误。相反,<code>json_data['primaryTopic']['Accounts']['AccountCategory']</code>(或者其他什么)实际上是<code>None</code>(也就是说,在原始JSON中是<code>null</code>)。你知道吗</p>
<p>避免这种情况的最简单方法是使用<code>or</code>关键字添加一个默认值(如果值为“false ish”),如下所示:</p>
<pre><code>accounts_category = json_data['primaryTopic']['Accounts']['AccountCategory'] or ''
</code></pre>
<p>也可以在<em>使用</em>值时执行此操作:</p>
<pre><code>line = "%s|%s|%s|%s\n" % (H, vn_id, sn_id, supplier_name or '')
</code></pre>
<p>作为奖励,因为这看起来并不是真正引起错误,所以您可能能够摆脱所有<code>try/except</code>样板文件。如果你还需要做很多次的爱的话,那就去做吧!例如:</p>
<pre><code>def jsonfield(jsonobj, default, *names):
try:
for name in names:
jsonobj = jsonobj[name]
return jsonobj or default
except (TypeError, KeyError):
return default
accounts_category = json_field(json_data, "", "primaryTopic", "Accounts", "AccountCategory")
</code></pre>