擅长:python、mysql、java
<p>最初创建.py文件时,文本编辑器引入了非打印字符。在</p>
<p>考虑这一行:</p>
<pre><code>carregar_uml("H:\\7 - Script\\teste.csv", variaveis)
</code></pre>
<p>让我们仔细选择字符串(包括引号),并将其复制粘贴到交互式Python会话中:</p>
^{pr2}$
<p>如您所见,在<code>H</code>之前有一个代码点为U-202A的字符。在</p>
<p>正如其他人指出的,代码点U-202A的字符是<code>LEFT-TO-RIGHT EMBEDDING</code>。回到我们的Python会话:</p>
<pre><code>>>> s = "H:\\7 - Script\\teste.csv"
>>> import unicodedata
>>> unicodedata.name(s[0])
'LEFT-TO-RIGHT EMBEDDING'
>>> unicodedata.name(s[1])
'LATIN CAPITAL LETTER H'
>>>
</code></pre>
<p>这进一步确认字符串中的第一个字符不是<code>H</code>,而是非打印<code>LEFT-TO-RIGHT EMBEDDING</code>字符。在</p>
<p>我不知道你用什么文本编辑器来创建你的程序。即使我知道,我可能不是那个编辑的专家。不管怎样,你使用的一些文本编辑器插入,你不知道,U+202A</p>
<p>一种解决方案是使用文本编辑器,它不会插入该字符,并且/或将突出显示非打印字符。例如,在<code>vim</code>中,该行显示如下:</p>
<pre><code>carregar_uml("<202a>H:\\7 - Script\\teste.csv", variaveis)
</code></pre>
<p>使用这样的编辑器,只需删除<code>"</code>和{<cd1>}之间的字符。在</p>
<pre><code>carregar_uml("H:\\7 - Script\\teste.csv", variaveis)
</code></pre>
<p>即使这一行在视觉上与你原来的一行完全相同,我还是删除了这个冒犯的字符。使用这一行将避免您报告的<code>OSError</code>。在</p>