2014-04-23 41 views
5

czytałem tutaj, że zaleca się stosowanie with open(filename) zamiast używania parę open(filename) i filename.close() (przynajmniej dla podstawowych zadań) i że jest również lepiej użyć try.Confused o właściwej kolejności spróbować i Python

Pytanie 1: Jeśli moje zrozumienie jest poprawne, jaka byłaby właściwa kolejność?

try: 
    with open(filename) as f: 
    do something, eg. match string 

lub

with open(filename) as f: 
    try: 
    do something, eg. match string 

Q2: Która sprawa jest lepiej, jeśli chcę również, aby wstawić jakiś kod, aby przywołać okienko do plików przenoszenia błąd? (dla pliku nieznalezionego lub coś podobnego)

Odpowiedz

8

Zachowaj swoje oświadczenie try/except tak blisko źródła wyjątku, jak to możliwe.

Jeśli nie złapiesz IOError s, umieść go w oświadczeniu with. Z drugiej strony, jeśli jest to wyjątek, który wyrzuca open(), umieść go wokół z instrukcją with.

Jeśli instrukcja with jest dłuższy lub nie chcesz zamaskować ten sam wyjątek jest podniesione w rachunku pakietu with wykonaj open() połączenia pierwszy:

try: 
    fileobj = open(filename) 
except IOError: 
    print('File problems!') 
else: 
    with fileobj as f: 
     # do something