[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Fragen zum Error-Objekt und zu throw

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Fragen zum Error-Objekt und zu throw

mdomino
Beiträge gesamt: 76

8. Nov 2015, 22:25
Beitrag # 1 von 6
Bewertung:
(1918 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Scripter!

Ich versuche gerade in meinem Script zu Debugging-Zwecken eigene Fehler „zu werfen“ und entweder verstehe dabei nicht ganz, wie das Error-Objekt funktioniert oder das Error-Objekt hat einen Bug.

Zunächst zum von InDesign erstellen Error-Objekt bei Laufzeitfehlern. Angeblich hat das Error-Objekt eine property namens „description“ und drei Parameter namens „msg“, „file“ und „line“. Dann habe ich irgendwoher noch die property namens „message“, die im Objektmodell aber nicht genannt wird.

Produziere ich jetzt einen Laufzeitfehler und fange diesen in einem catch auf und gebe mal die ganzen Sachen per alert aus, habe ich folgende Ergebnisse:

Code
try { 
app.pages = 2; // Laufzeitfehler
} catch (err) {
alert(err); // Fehler: Objekt unterstützt Eigenschaft oder Methode pages nicht
alert(err.description); // Objekt unterstützt Eigenschaft oder Methode pages nicht
alert(err.message); // Objekt unterstützt Eigenschaft oder Methode pages nicht
alert(err.msg); // undefined
alert(err.file); // undefined
alert(err.line); // 2
}


Was mich hier vor allem wundert: Warum sind „msg“ und „file“ undefined, wohingegen „line“ ausgefüllt ist? Wie schafft man es hier, dass auch „file“ ausgefüllt wird?

Dann meine nächste große Frage: Wie „werfe“ ich einen eigenen Fehler mittels throw? Also was ist der korrekte Weg?

Ich habe Folgendes versucht und komme dabei zum gleichen Ergebnis wie vorhin:

Code
var produceError = function (truth) { 
if(truth) {
throw new Error ("I'm an intentional error.");
}
};

try {
produceError(true);
} catch (err) {
alert(err); // Fehler: I'm an intentional error.
alert(err.description); // I'm an intentional error.
alert(err.message); // I'm an intentional error.
alert(err.msg); // undefined
alert(err.file); // undefined
alert(err.line); // 3
}


Worauf ich letztendlich hinausmöchte ist folgendes: Ich möchte gerne, dass sowohl reguläre Laufzeit-Errors, als auch Errors, die ich selber mit throw erzeuge in der gleichen try/catch-Anweisung in meiner Hauptfunktion abgefangen werden und mir dann in der catch-Anweisung sinnvoll per alert() angezeigt werden, jeweils mit Fehlermeldung, Scriptdatei und Zeile.

Dazu könnte ich folgende alert-Anweisung schreiben:

Code
alert("Error\n" + err.description + "\nFile: " + err.file + "\nLine: " + err.line); 


Allerdings wird da bei err.file jeweils die Script-Datei nicht angezeigt, egal ob bei Laufzeit-Fehlern oder eigenen Fehlern, was bei mir aber wichtig wäre, da ich mit vielen #include-Dateien arbeite.

Wenn ich einen eigenen Fehler produziere könnte ich auch Folgendes mache, ich könnte throw ein Objekt übergeben:

Code
throw { 
description: "I'm an intentional error",
file: $.file,
line: $.line // line könnte ich wohl auch weglassen
}


Wenn ich das mache, dann wird meine Error-Alert-Message korrekt ausgefüllt. Aber ist das der richtige Weg mit throw ein Error-Objekt zu produzieren? Und bei einem Laufzeit-Error wäre der file-Teil meiner Alert-Message immer noch unausgefüllt mit "undefined", wie kann ich das beheben?

Vielen Dank im Voraus und viele Grüße,
MD
X

Fragen zum Error-Objekt und zu throw

mdomino
Beiträge gesamt: 76

9. Nov 2015, 01:25
Beitrag # 2 von 6
Beitrag ID: #544335
Bewertung:
(1870 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe ein bisschen weitergestöbert und vermute jetzt, dass es sich bei dem "file"-Parameter um einen Fehler in Adobes Dokumentation des Objektmodells handelt. Gebe ich nämlich bei einem Laufzeitfehler

Code
alert(e.fileName) 


aus, dann zeigt er mir den Dateinamen an. Ich gehe also davon aus, dass der eigentliche Parameter „fileName“ schlicht falsch als „file“ dokumentiert wurde. Genauso gehe ich davon aus, dass der angebliche Parameter „msg“ eigentlich „message“ heißt.

Siehe z.B. hier (wobei die Infos natürlich direkt von Adobe übernommen sind): http://www.indesignjs.de/extendscriptAPI/indesign8/#Error.html

Das heißt, ich werfe einen Fehler schlicht

Code
throw new Error("Ich bin ein Fehler!") 


und kann ihn dann folgendermaßen ausgeben:

Code
alert("Error\nMessage: " + e.message + "\nFile: " + e.fileName + "\nLine: " + e.line); 


– was ihr wahrscheinlich alle schon wusstet. ;)

Da hat mich das Objektmodell unnötig verwirrt.

Viele Grüße,
MD


als Antwort auf: [#544333]

Fragen zum Error-Objekt und zu throw

mdomino
Beiträge gesamt: 76

9. Nov 2015, 02:37
Beitrag # 3 von 6
Beitrag ID: #544337
Bewertung:
(1859 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, mein Selbstgespräch geht in die nächste Runde.

Ich habe bei Marc Autret jetzt noch diese sehr interessanten Ausführungen gefunden, wo er zeigt, wie man sein eigenes Error-Objekt konstruieren kann: http://www.indiscripts.com/...rum-roundup-5#hd2sb1

Er schlägt folgenden Code vor:

Code
// No need to use the native Error class 
//--------------------------------------

function MyException(msg,s)
{
this.message = msg || '';
this.name = s || 'Error';
this.stack = null;
};

MyException.prototype.toString = function()
{
// Hook $.stack *on first invocation*
// ---
this.stack || (this.stack = $.stack.
replace(/[\r\n]toString\(\)[\r\n]$/,'').
split(/[\r\n]/)
);

// Make toString() ECMA-262 compliant
// ---
return this.name + ': ' + this.message;
};


// =================
// Example code
// =================

function inner()
{
throw new MyException("Something's gone wrong!");
}

function outer()
{
inner();
}

function main()
{
try{ outer(); }
catch(e)
{
alert( e ); // => Error: Something's gone wrong!
alert( e.stack ); // => [myScript.jsx],main(),outer(),inner()
}
}

main();


Wenn ich das jetzt wie oben dargestellt per throw aufrufe, dann habe ich allerdings tatsächlich keine Resultate mehr bei e.fileName und e.line, was ja auch nachvollziehbar ist.

Wie kann ich aber diese Funktionalität wieder einbauen?
Ich habe versucht in Zeile 9 (also direkt unter "this.stack = null;") ein

Code
this.line = $.line 


einzubauen, aber wenn ich das als Fehler auslöse, dann wird mir immer nur "9" als Zeile ausgegeben und nicht die Zeile, in der der Fehler eigentlich ausgelöst wurde.

Gibt es da eine Möglichkeit, das direkt in die Funktion einzubauen, ohne dass ich das in die Funktionsparameter aufnehmen muss und dann jedesmal manuell $.line in die Funktionsparameter reinschreiben müsste?

Vielen Dank und viele Grüße,
MD


als Antwort auf: [#544335]
(Dieser Beitrag wurde von mdomino am 9. Nov 2015, 02:46 geändert)

Fragen zum Error-Objekt und zu throw

WernerPerplies
Beiträge gesamt: 2572

9. Nov 2015, 06:10
Beitrag # 4 von 6
Beitrag ID: #544338
Bewertung:
(1803 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag MD,

die meisten Fragen hast Du Dir ja selbst beantwortet, dennoch einen weiteren Link:

InDesign Script Programming - Errorhandling

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#544337]

Fragen zum Error-Objekt und zu throw

mdomino
Beiträge gesamt: 76

12. Nov 2015, 02:50
Beitrag # 5 von 6
Beitrag ID: #544442
Bewertung:
(1592 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

vielen Dank abermals für deine Antwort. Hat ein bisschen länger gedauert, bis ich mir das ansehen konnte und ist auch definitiv ein bisschen komplizierter zu durchschauen, das Error-Handler-Script für mich als Nicht-Profi, aber ich glaube nach einigem Rumrätseln und Rumprobieren, werde ich tatsächlich halbwegs schlau aus der Datei. ;)

Dankeschön!

MD


als Antwort auf: [#544338]

Fragen zum Error-Objekt und zu throw

WernerPerplies
Beiträge gesamt: 2572

12. Nov 2015, 06:03
Beitrag # 6 von 6
Beitrag ID: #544443
Bewertung:
(1562 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo MD,

Zitat ... und ist auch definitiv ein bisschen komplizierter zu durchschauen, das Error-Handler-Script für mich als Nicht-Profi, aber ich glaube nach einigem Rumrätseln und Rumprobieren, werde ich tatsächlich halbwegs schlau aus der Datei. ;)


Oh, ist ja eigentlich auch zum Einbinden (#include!) und benutzen gedacht und dann eher zur Fehleranalyse:

Welches Betriebssystem wird benutzt?
Welche Indesign-Version?
Wo ist der Fehler aufgerufen?
Wie sieht der Stack aus?
Welche Parameter wurden verwendet?
Wo ist der Fehler aufgetreten?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#544442]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
01.03.2021 - 05.03.2021

Persönlichkeitsentwicklung

Online
Montag, 01. März 2021, 00.17 Uhr - Freitag, 05. März 2021, 00.18 Uhr

Webinar

Personal Power Coaching - Um was geht es? ​ Potenzialentfaltung: Potenzial entdecken und entfalten Talente entdecken: Deine Talente und Fähigkeiten erkennen und loslegen Gewohnheiten: schlechte Gewohnheiten durch Positive ersetzen Selbstbewusstsein stärken: Dein Bewusstsein stärken Eigendynamik entwickeln: Mehr Erfolg durch Eigenverantwortung & Disziplin Ängste kontrollieren: Ängste als Antrieb nutzen Entscheidungen treffen: Mit mehr Mut an die Sache ran! Lebensenergie steigern: Deine Lebensenergie steigern und aufrechterhalten Ziele erreichen: Ziele setzen und übertreffen! Motivationssteigerung: Mehr Erfolg durch Selbstmotivation Selbstvertrauen: Selbstvertrauen auf- und ausbauen

Details:
https://www.snfa.ch/swiss-personal-power-birolisik

Ja

Organisator: Birol Isik

Kontaktinformation: Birol Isik, E-Mailinfo AT snfa DOT ch

https://www.snfa.ch/swiss-personal-power-birolisik

Neuste Foreneinträge


Affinity Designer

Optimierung doc2pdf-withPresets.jsx

Layout / Bildauflösung druckfertig anlegen

Affinity Publisher 1.9

Alternative Acrobat Pro

Affinity Photo

Open CL-Berschleunigung

Studiovorgaben (Workspace) beim Programmstart vorgeben?

Illustrator AI in Designer öffnen

Verknüpfung mit Format aufheben
medienjobs