try() und throw()... Ich verstehe es einfach nichtIch habe wirklich versucht (kein Wortspiel beabsichtigt), try() und throw() zu verwenden, aber es scheint nicht so zu funktionieren, wie ich es gelesen habe.
Ich habe einen Datensatz mit den Spalten Wert und Parameter. Ich möchte ein Skript ausführen und viele Dinge mit diesem Datensatz tun, aber nur, wenn diese Spalten vorhanden sind. Kann mir jemand erklären, wie man in diesen Fällen try() und throw() verwendet oder ob sie überhaupt verwendet werden sollten?
Sollte das Skript so aussehen?
mydt=current data table();
if (
try(
Column (mydt, "Value") & Column (mydt, "Parameter"),
throw("Value and Parameter columns do not exist");
);
rest of script;
);
oder dieses?
mydt=current data table();
try(
Column (mydt, "Value") & Column (mydt, "Parameter");
rest of script,
throw("Value and Parameter columns do not exist");
);
Betreff: try() und throw()... Ich verstehe es einfach nichtIch möchte Ihnen allen danken. Mit Ihrer Hilfe konnte ich try() und throw() viel besser verstehen und habe sie in mehreren Bereichen meiner Skripte erfolgreich eingesetzt.
vielen Dank,
Heidekraut
Betreff: try() und throw()... Ich verstehe es einfach nichtAnstatt Try zu verwenden, können Sie explizit prüfen, ob eine Spalte vorhanden ist.
dt = open("$sample_data\Big Class.jmp");
col_list = dt << get column names(string);
if (!contains(col_list, "Value") | !contains(col_list("Parameters")),
nw = new window("Missing columns", << modal(),
text box("Value and Parameter columns do not exist")
);
throw("Value and Parameter columns do not exist");
);
Betreff: try() und throw()... Ich verstehe es einfach nichtWenn die Funktion Trow() auf diese Weise verwendet wird, stoppt sie die Skriptausführung und schreibt die in Anführungszeichen gesetzte Zeichenfolge in das Protokoll. Wenn Throw() außerdem aus einer Fensteraktion generiert wird, wird mit der Meldung auch ein Warnfenster angezeigt.
Wenn Sie die Ausführung des Skripts stoppen möchten, wenn diese Spalten nicht vorhanden sind, können Sie dazu die Funktion Throw() verwenden. Sie können entweder den Rest des Skripts in den Versuch einschließen oder nach dem Versuch die Ausführung des Skripts stoppen, wenn ein Fehler auftritt.
Außerdem schlägt die Verwendung des Abschnitts Ihres Codes unten fehl, selbst wenn die Spalten vorhanden sind, da Sie Spalten nicht mit UND (&) verknüpfen können, um etwas zurückzugeben. Die Fehlermeldung lautet: „Argument kann beim Zugriff oder bei der Auswertung von ‚Und‘ nicht in eine Zahl [oder Matrix] konvertiert werden.“
Column (mydt, "Value") & Column (mydt, "Parameter");
Das folgende Beispiel gibt den „Rest des Skripts“ in das Protokoll aus, wenn die Big-Class-Tabelle geöffnet wird, und gibt eine Meldung in das Protokoll aus, wenn dies nicht der Fall ist. Ich habe gerade Verweise auf beide Spalten eingefügt, um zu testen, ob sie vorhanden sind.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
Try(
Column( dt, "height" );
Column( dt, "weight" );
,
Throw( "height and weight columns do not exist" )
);
Print( "rest of script" );
Betreff: try() und throw()... Ich verstehe es einfach nichtIch denke, was Sie wirklich tun möchten, ist:
If(
Try( Column( mydt, "Value" ) << get name, "" ) == "" |
Try( Column( mydt, "Parameter" ) << get name, "" ) == "",
Throw( "Value and Parameter columns do not exist" ),
rest of script
);
Mit der Try-Funktion können Sie einen Vorgang ausführen, der bei einem Fehlschlag die Verarbeitung nicht stoppt.Außerdem kann ein zweiter Parameter festgelegt werden, der zurückgegeben wird, wenn der Try eine Fehlerbedingung findet.
Das obige Skript gibt also ein „“ zurück, wenn die Variable „value“ nicht existiert, und gibt ein „“ zurück, wenn die Variable „Parameter“ nicht existiert und da ein OR „|“ Wird die Klausel verwendet, ist das Ergebnis des Gesamtvergleichs wahr, wenn keine der Variablen gefunden wird.Wenn das Ergebnis wahr ist, wird die Funktion Throw() ausgeführt, andernfalls wird der Rest des Codes ausgeführt.
Betreff: try() und throw()... Ich verstehe das einfach nichtIhre Antwort ist sehr gut! Danke ~ 厉害了:thumbs_up: