事前に申し訳ありません - これはおそらく愚かな質問ですので、私はコーディングに新しいです!私は明示的にそれを要求していないときに、なぜpythonが空のリストを返すのですか?
ローカルのテキストファイル(私はhttp://norvig.com/big.txtのテキストをダウンロードしました)をスキャンして、このファイルからランダムな行を読み取り、リストに印刷しようとしています。
しかし、私は空の行、テキストを含む行だけを印刷したくありません。
だから私は、次のコードを使用しようとしました:
import random
with open('C:\\big.txt', 'r') as f:
while True:
random_line_str = random.choice(f.readlines())
random_line_lst = random_line_str.split()
if random_line_lst != []:
print(random_line_lst)
break
だから、これはテキストを含む行のために正常に動作します。しかし、それはまた、時折、次のエラーを吐く:私はすべてのアイデアは、私はこの出来事を回避し、線のみを返すことができるか...
を正直に言うと、ここで何が起こっているかの手がかりを
Traceback (most recent call last):
File "C:\Python\lib\random.py", line 253, in choice
i = self._randbelow(len(seq))
File "C:\Python\lib\random.py", line 230, in _randbelow
r = getrandbits(k) # 0 <= r < 2**k
ValueError: number of bits must be greater than zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/PycharmProjects/Testing/Test.py", line 5, in <module>
random_line_str = random.choice(f.readlines())
File "C:\Python\lib\random.py", line 255, in choice
raise IndexError('Cannot choose from an empty sequence')
IndexError: Cannot choose from an empty sequence
持っていませんテキストを含んでいますか?
乾杯!項目は(常にtrueになりますitem not in []
を意味する)は常にfalseをされる、空のリストにある場合
'while true'を' for line in f'に置き換えてください。 –
ループの前にデッドラインを一度呼び出して結果リストを保存するだけです。 –