私は次のようなことをしたいです:
for line in sys.stdin:
do_something()
if is **END OF StdIn**:
do_something_special()
数回の試行の後、今のところ私はこれをやっています:
while True:
try:
line = sys.stdin.next()
print line,
except StopIteration:
print 'EOF!'
break
またはこれで:
while True:
line = sys.stdin.readline()
if not line:
print 'EOF!'
break
print line,
上記の両方の方法は非常に似ていると思います。これを行うためのよりエレガントな(Pythonic)方法はありますか?
私は最初にStopIteration
ループの内側または外側からfor
をキャッチしようとしましたが、StopIteration
例外がbuild intoであるため、すぐに気付きましたfor
ループ自体、次のコードスニペットは両方とも機能しませんでした。
try:
for line in sys.stdin:
print line,
except StopIteration:
print 'EOF'
または
for line in sys.stdin:
try:
print line,
except StopIteration:
print 'EOF'
for line in sys.stdin:
do_whatever()
# End of stream!
do_whatever_else()
とても簡単です。
Try/exceptを使用してください。 入力
EOFが読み取られると、EOFErrorが発生します。
while True:
try:
s=input("> ")
except EOFError:
print("EOF")
break