我有一個生成器,通過過濾器從多個文件中返回行。它看起來像這樣:爲什麼我的發生器掛起而不是拋出異常?
def line_generator(self):
# Find the relevant files
files = self.get_files()
# Read lines
input_object = fileinput.input(files)
for line in input_object:
# Apply filter and yield if it is not *None*
filtered = self.__line_filter(input_object.filename(), line)
if filtered is not None:
yield filtered
input_object.close()
self.get_files()
返回的文件路徑或空列表的列表的方法。我試過做s = fileinput.input([])
,然後打電話s.next()
。這是它掛起的地方,我不明白爲什麼。我試圖變pythonic,而不是自己處理所有的錯誤,但我想這是一個沒有辦法解決的問題。或者在那裏?
不幸的是,我現在沒有辦法在Linux上測試它,但是有人可以在Linux上嘗試以下操作,並評論他們得到了什麼?
import fileinput
s = fileinput.input([])
s.next()
我在Windows上用Python 2.7.5(64位)。
所有的一切,我真的很想知道:
這是一個錯誤的Python或我是做錯了什麼? 不應該.next()總是返回一些東西,或者提高一個StopIteration
?
程序「掛起」是什麼意思?你如何執行它?你看到的輸出是什麼?你想要的輸出是什麼?另外:「這是Python的錯誤,還是我做錯了什麼?」答案總是*用戶做錯了什麼。在Python中發現錯誤的機會非常渺茫,特別是對於像你這樣的「微不足道」的代碼。你應該簡單地忽略這種可能性,因爲它只會讓你有時間思考它會是什麼樣的錯誤。 – Bakuriu
我正在使用IDLE來完成一切。我在這裏製作了som屏幕截圖:http://ge.tt/9dh4hqv Snap1.png在運行上述命令之後。當我按Ctrl + C打破它時,Snap2.png是輸出。基本上只是掛在Snap1.png描繪的狀態,除非你打破它。 – beruic