擅长:python、mysql、java
<p>问题在于<code>with</code>的用法。使用<code>with</code>语句时,必须提供一个返回某些内容的执行,以及<code>as</code>定义的变量:</p>
<pre><code>with process as foo:
do_something
</code></pre>
<p>它计算<code>process</code>,对返回值调用<code>__enter__</code>方法(称为“上下文保护”),并将<code>__enter__</code>的返回值赋给变量<code>foo</code>。之后,执行<code>do_something</code>,不管发生什么,都会调用guard对象的<code>__exit__</code>方法。请参阅更多<a href="http://effbot.org/zone/python-with-statement.htm" rel="nofollow noreferrer">here</a>,这里的解释是从哪里来的。
所以不能像在代码中那样简单地将<code>with</code>与文件名一起使用</p>
<p>如果我没弄错的话,你的artist.txt文件有10行不同的艺术家,你试图随机选择其中一行并打印出来。例如,您可以执行以下操作:</p>
<pre><code>import random
with open('artists.txt', 'r') as file:
ARTIST = random.randint(0, 9)
print(file.readlines()[ARTIST])
</code></pre>
<p>这和</p>
<pre><code>import random
file = open('artists.txt', 'r')
ARTIST = random.randint(0, 9)
print(file.readlines()[ARTIST])
file.close()
</code></pre>
<p>但是更安全、更有效,因为文件在执行代码后会自动关闭</p>
<p>这将读取文件中的所有行,将它们放在一个列表中,选择一个0到9之间的随机数,然后在该位置打印列表中的对象,从文件中随机生成一个艺术家</p>