<p>正如其他人所提到的,<a href="https://docs.python.org/3/library/stdtypes.html#dict.get" rel="nofollow noreferrer">using ^{<cd1>} on a dictionary will result in a ^{<cd2>} if the value does not exist</a>:</p>
<blockquote>
<p><strong>get</strong>(key[, default])</p>
<p>Return the value for <em>key</em> if <em>key</em> is in the dictionary, else <em>default</em>. If <em>default</em> is not given, it defaults to <code>None</code>, so that this method never raises a <a href="https://docs.python.org/3/library/exceptions.html#KeyError" rel="nofollow noreferrer"><code>KeyError</code></a>.</p>
</blockquote>
<p>它是一个字典,所以你甚至可以做类似<code>os.environ['DB_HOST']</code>的事情,而不是使用<code>.get()</code>。为什么?因为如果这个值不存在的话,你会在启动时得到一个错误!对于你的应用程序来说,这可能是非常重要的。:)</p>
<p>好的,很明显,<code>os.environ.get('DB_HOST')</code>在代码中返回了<code>None</code>。为什么?在</p>
<p><a href="https://docs.python.org/3/library/os.html#os.environ" rel="nofollow noreferrer">^{<cd7>}</a>允许您从shell访问操作系统的环境变量。显然,变量<code>DB_HOST</code>没有在任何地方设置!在</p>
<p>要解决您的问题,您必须在您的操作系统中为<code>DB_HOST</code>设置环境变量,或者以其他方式提供信息。就个人而言,我喜欢通过<a href="https://docs.python.org/3/library/argparse.html" rel="nofollow noreferrer">argparse</a>将这些值作为命令行参数传入,但这取决于您!在</p>
<hr/>
<p>如果您真的想使用操作系统的环境,我将给出一个在bash(我的shell)中设置变量的示例。你必须查找其他shell的并行指令。在</p>
<p>从bash命令行:</p>
<pre><code>$ export TEST_VAL="My hovercraft is full of eels."
$ python
(...)
>>> import os
>>> os.environ['TEST_VAL']
'My hovercraft is full of eels.'
</code></pre>
<p>请注意,在Python中使用<code>os.environ</code>不能在变量自身的交互作用之外为这个变量设置一个新值。也就是说:</p>
^{2}$