try-catch-block in Matlab
So, ich lese Hunderte von image-Dateien per imread('D:\pic1\foo.jpg')
und einige von Ihnen sind wie imread('D:\pic2\Thumbs.db')
. Nach der Lektüre bin ich der Speicherung in einer Datenbank wie dieser train(i) = imread('D:\pic1\foo.jpg')
. Das problem ist mit imread('D:\pic2\Thumbs.db')
ist, das Lesen von solchen Dateien gibt Fehler offensichtlich . Ich wollte das problem gemindert werden, wie diese:
for i=1:N
try
train(i) = imread(link{i})
%link{i} can be 'D:\pic2\Thumbs.db' or 'D:\pic1\foo.jpg'
catch
disp('Error')
end
end
Das Problem ist in den try-block hier. Es gibt zwei Dinge, die passierten, liest die Datei ein weiteres ist die Zuordnung imread Wert train(i)
. Nun, dies ist wichtig, nur auf eine erfolgreiche imread()
sollte es sein, einen Auftrag auf einen Fehler, es wäre ein Fehler. Matlab kümmert sich um die Fehler per catch-block, gibt es nicht einen block zu kümmern, Erfolg, Zustand, wo ich die Zuordnung, so dass ich Lesen und schreiben kann, ohne viel Aufwand.
Ich möchte so etwas wie dies:
j = 0;
for i=1:N
try:
imread(links{i})
if success:
train(j) = imread(links{i})
j = j+1;
if fail:
error
end
end
Kam ich erst mit try und catch bei der Suche Matlab-docs, ich werde wirklich schätzen, wenn es etwas gibt, was mir helfen wird, den code zu schreiben lapidar.
InformationsquelleAutor motiur | 2013-12-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Lösung von @gnovice ist korrekt, aber es kann geschrieben werden, ein bisschen mehr auf den Punkt:
InformationsquelleAutor Jonas
Lösen können Sie dieses problem mit einem
weiter
- Anweisung und eine temporäre variable zum Beispiel so:Wenn
imread
wirft einen Fehler, wird die Steuerung an diecatch
block, der eine Meldung anzeigt, und ruft danncontinue
übergeben die Kontrolle an die nächste iteration der for-Schleife, wobei alle nachfolgenden Befehle. Wennimread
erfolgreich ist, wird der code nach dertry\catch
- block ausgeführt, Zuweisung der Ausgabe vonimread
auf variabletrain
.Sie sind richtig -
tempVar
ist nicht erforderlich.Es sieht aus wie ich, hatte sich an der Reparatur Ihres ersten Beispiel, während @Jonas konzentrierte sich auf die Festsetzung der zweiten. Sie unterscheiden sich hauptsächlich darin, ob Sie wollen
train
zu immer werden LängeN
(von mir), oder ob Sie es nur haben die Länge gleich der Anzahl der gültigen Bilder (Jonas'). Wenn Jonas' Antwort besser Ihren Vorstellungen entspricht, fühlen Sie sich bitte frei, um ihm den Scheck. Ich werde nicht dagegen sein. 😉InformationsquelleAutor gnovice