<p>首先,您的<code>hfile</code>要么是一个字符串,要么是<code>None</code>。这两个都不是<code>is True</code>。它们都不是偶数。在</p>
<p>非空弦是真理。^{cd2>不是。两者都不是非空字符串。因此,如果您想将空字符串(例如,<code> host-file=''</code>)视为无参数,只需测试<code>hfile</code>的真实性:</p>
<pre><code>if hfile:
</code></pre>
<p>另一方面,如果要将空字符串视为有效参数,请测试<code>None</code>-ness:</p>
^{pr2}$
<hr/>
<p>你对<code> host</code>没有这个问题的原因很简单:你没有在任何地方测试<code>host</code>,所以没有地方会出错。在</p>
<hr/>
<p>但是,也许您应该测试<code>host</code>的<code>None</code>。我不确定您在这种情况下到底想做什么,但是您肯定不想用<code>None</code>来调用<code>connect(user, host, passwd, en_passwd)</code>,而不是{<cd10>}。这就是为什么会出现异常,因为库正在尝试将所有这些字符串连接在一起,而其中一个不是字符串。在</p>
<hr/>
<blockquote>
<p>If it was failing, I would have expected it to error using "child = connects(user, hosts, passwd, en_passwd)" If you look close, youll see that under my "if" I use connects, and hosts (plural), but it looks like its trying to parse the file under the main connect, and host.</p>
</blockquote>
<p>但是您的<code>if</code>永远不会触发,所以在该块中做什么并不重要。另一方面,<code>connect</code><em>总是</em>运行,所以这就是失败的原因。在</p>
<hr/>
<p>最后,你的逻辑一开始就没有意义了。在</p>
<p>查看<code>hosts</code>文件。对于每一行,请选中<code>hfile</code>。如果这是真的,您将执行一个连接,然后<code>exit</code>。如果它不是真的,它就永远不会变成<code>truthy</code>,所以您也将跳过所有其他行。所以,你不可能处理第一行之外的任何行。在</p>
<p>另外,在这个循环中,您将<code>hosts</code>替换为每一行。在</p>
<p>另外,你正在剥离<code>r</code>而不是<code>\r</code>,而且你在</em><code>\n</code>之前剥离了它,这意味着即使你做得对,也不会有任何东西需要剥离。在</p>
<p>最后,您得到了<code>main</code>定义之后的所有顶层代码,并尝试使用<code>main</code>的局部变量,甚至从不调用<code>main</code>。我怀疑您可能混合了制表符和空格,所以最后粘贴到这里的内容与您在原始脚本中的不匹配;如果是这样的话,几乎可以肯定的是,如果您幸运的话(并得到了一个<code>IndentationError</code>)很难调试的问题,如果您没有(只是有错误的流控制),则几乎不可能。找到一个文本编辑器,它可以自动将标签页转换成空格和/或直观地显示标签页(除了记事本和TextEdit几乎可以做任何事情…),并使用<code>-tt</code>标志测试脚本,以防它滑过编辑器。在</p>
<p>不管怎样,也许你想要<a href="http://pastebin.com/M7GaJ4gP" rel="nofollow">this</a>之类的东西,但我只是在猜测。在</p>