С помощью команды next(a_file)
я могу пропустить первую строку файла, но только если она действительно есть. Если на момент выполнения команды в файле ничего нет, я получаю сообщение об ошибке. Как я могу избежать этой проблемы?
Пример ошибки:
a_file = open("helloo.txt")
next(a_file)
print(a_file.read())
Что бы вы хотели, чтобы произошло, если в файле нет строки?
И какую именно ошибку вы получаете?
Просто используйте блок try: except
. Вы хотите поймать только исключение StopIteration
, чтобы никакие другие (FileNotFoundError
,...) не попали сюда:
a_file = open("helloo.txt")
try:
next(a_file)
except StopIteration:
print("Empty file")
# or just
#pass
print(a_file.read())
Вы можете обернуть его попыткой исключения блока:
try:
next(a_file)
except StopIteration:
# handle the exception
Вы можете просто использовать блок try
-except
в python, чтобы определить, возникает ли какая-либо ошибка при вызове метода next()
. В случае возникновения какой-либо ошибки, которая в вашем случае будет StopIteration
, мы выполняем блок исключений, и, таким образом, программа продолжает работать без сбоев.
a_file = open("helloo.txt")
try:
next(a_file)
except StopIteration:
print("File is empty.")
print(a_file.read())
Проверьте, пуст ли файл, и если нет, выполните next()
:
import os
a_file = open("helloo.txt")
if os.stat("helloo.txt").st_size != 0:
next(a_file)
print(a_file.read())
a_file.close()
Или вы можете использовать try
except
вот так:
a_file = open("helloo.txt")
try:
next(a_file)
except StopIteration:
pass
print(a_file.read())
Плохая практика — назначать вызов open
переменной через оператор =
. Вместо этого используйте with
:
with open("usernames.txt") as a_file:
try:
next(a_file)
print(a_file.read())
except StopIteration:
print("Empty")
Я также хотел бы познакомить вас с утверждением finally; это происходит только после того, как в блоке используются try
и except
:
with open("usernames.txt") as a_file:
try:
next(a_file)
print(a_file.read())
except StopIteration:
print("Empty")
finally:
print("End!")
Не могли бы вы также поделиться содержимым файла.