2009-11-02 9 views
11

Próbuję zapisać sukces lub niepowodzenie szeregu poleceń kopiowania w pliku dziennika. Używam shutil.copy() - np.Jak mogę przechwycić wartość zwracaną przez shutil.copy() w Pythonie (w systemie DOS)?

str_list.append(getbitmapsfrom) 
game.bigbitmap = "i doubt this is there.bmp" 
str_list.append(game.bigbitmap) 
source = '\\'.join(str_list) 
shutil.copy(source, newbigbmpname) 

I zmusił jednego z poleceń kopiowania w moim skrypcie na niepowodzenie, a wygenerowany błąd:

[Errno 2] No such file or directory: 'X:\PJ_public\PJ_Services\BSkyB-PlayJam\Content\P_NewPortal2009\1.0.0\pframes\i doubt this is is there.bmp'

To jest dobre, ale mogę uchwycić "Errno 2 No such file or directory" i zapisać go do dziennika plik? Czy shutil.copy() zwraca wartość całkowitą? - Nie widzę tego opisanego w dokumentacji Pythona.

Chyba też chcę móc przechwycić wartość zwracaną, aby skrypt nie zbankrutował przy niepowodzeniu kopiowania - staram się kontynuować, niezależnie od błędów.

Dzięki.

Odpowiedz

16

będziemy chcieli przyjrzeć się exceptions section z Python tutorial. W przypadku, gdy shutil.copy() nie znajdzie jednego z argumentów, zgłoszony zostanie wyjątek IOError. Możesz pobrać wiadomość z wystąpienia wyjątku.

try: 
    shutil.copy(src, dest) 
except IOError, e: 
    print "Unable to copy file. %s" % e 
4

Rzadko będziesz widzieć kody powrotu podobne do C w Pythonie, błędy będą sygnalizowane wyjątkami.

Prawidłowy sposób wyniku rejestracji jest:

try: 
    shutil.copy(src, dest) 
except EnvironmentError: 
    print "Error happended" 
else: 
    print "OK" 
+0

wiele dzięki Alex i Jamessan - Ja tylko starałem się wyjątki i to działa wspaniale. – BeeBand

1
try: 
    shutil.copy(archivo, dirs) 
except EnvironmentError: 
    print "Error en el copiado" 
    escritura = "no se pudo copiar %s a %s \n" % (archivo, dirs) 
else: 
    print "Copiado con exito" 
    escritura = "%s --> %s \n" % (archivo, dirs) 
finally: 
    log = open("/tmp/errorcreararboldats.log", "a") 
    log.write(escritura) 
    log.close() 
+0

fantastyczne. Dzięki temu jest to naprawdę przydatne. – BeeBand

Powiązane problemy