O que é uma boa maneira de lidar com exceções ao tentar ler um arquivo em python?
Quero ler A.ficheiro csv em python.
-
Não sei se o ficheiro existe.
- a minha solução actual está em baixo. Parece-me desleixado porque os dois testes de excepção separados são estranhamente justapostos.
import csv
fName = "aFile.csv"
try:
with open(fName, 'rb') as f:
reader = csv.reader(f)
for row in reader:
pass #do stuff here
except IOError:
print "Could not read file:", fName
38
Author: Charles Holbrow, 2011-04-12
4 answers
Acho que percebi mal o que me perguntaram. Re-reading, parece que a resposta do Tim é o que queres. Deixe-me apenas acrescentar isto, no entanto: se você quiser pegar uma exceção de
open
, então open
tem que ser embrulhado em um try
. Se a chamada para open
estiver no cabeçalho de a with
, então o with
tem de estar num try
para apanhar a excepção. Não há maneira de contornar isso.
A resposta é: "à Maneira do Tim" ou "não, estás a fazê-lo correctamente".".
anterior resposta inútil a que se referem todos os comentários:
import os
if os.path.exists(fName):
with open(fName, 'rb') as f:
try:
# do stuff
except : # whatever reader errors you care about
# handle error
22
Author: Josh Caswell, 2011-04-11 21:23:00
Que tal isto:
try:
f = open(fname, 'rb')
except IOError:
print "Could not read file:", fname
sys.exit()
with f:
reader = csv.reader(f)
for row in reader:
pass #do stuff here
22
Author: Tim Pietzcker, 2011-04-11 21:01:58
Aqui está um exemplo de leitura / escrita. As declarações com asseguram que a declaração close () será chamada pelo objeto de arquivo, independentemente se uma exceção é lançada. http://effbot.org/zone/python-with-statement.htm
import sys
fIn = 'symbolsIn.csv'
fOut = 'symbolsOut.csv'
try:
with open(fIn, 'r') as f:
file_content = f.read()
print "read file " + fIn
if not file_content:
print "no data in file " + fIn
file_content = "name,phone,address\n"
with open(fOut, 'w') as dest:
dest.write(file_content)
print "wrote file " + fOut
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except: #handle other exceptions such as attribute errors
print "Unexpected error:", sys.exc_info()[0]
print "done"
8
Author: edW, 2016-02-25 20:44:36
Adicionando ao exemplo de @Josh;
fName = [FILE TO OPEN]
if os.path.exists(fName):
with open(fName, 'rb') as f:
#add you code to handle the file contents here.
elif IOError:
print "Unable to open file: "+str(fName)
Desta forma você pode tentar abrir o arquivo, mas se ele não existe (se ele levanta um IOError), Alerte o usuário!
-4
Author: Zac Brown, 2011-04-11 21:04:14