Я пытался реализовать предложение @ VGE, но моя попытка оказалась не слишком элегантной. Буду признателен за любые предложения по улучшению этого.
import sys, fileinput, errno, os
class nosuchfile:
def readlines(foo, bar):
return []
def close(arg):
pass
EXITCODE=0
def skip_on_error (filename, mode):
"""Function to pass in as fileinput.input(openhook=...) hook function.
Instead of give up on the first error, skip the rest of the file and
continue with the next file in the input list.
In case of an error from open() an error message is printed to standard
error and the global variable EXITCODE gets overwritten by a nonzero
value.
"""
global EXITCODE
try:
return open(filename, mode)
except IOError, e:
sys.stderr.write ("%s: %s: %s\n" % (sys.argv[0], filename, os.strerror(e.errno)))
EXITCODE = 1
return nosuchfile()
def main ():
do_stuff(fileinput.input(openhook=skip_on_error))
return EXITCODE
И фиктивный класс файлового дескриптора заполнителя nosuchfile
, и глобальная переменная EXITCODE
- довольно серьезные проблемы. Я попытался выяснить, как передать ссылку на локальную переменную exitcode, но отказался.
Это также не в состоянии обрабатывать ошибки, возникающие при чтении, но в большинстве случаев, похоже, ошибки происходят в open
.