This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Textförmige Eingabe und Ausgabe /

Eingabe anfordernInternationale Meldungen

2.8.21 Meldungen

Mathematica verfügt über einen allgemeinen Mechanismus zur Handhabung von Meldungen, die während Berechnungen erzeugt wurden. Viele der eingebauten Mathematica-Funktionen benutzen diesen Mechanismus zur Erzeugung von Fehler- und Warnungsmeldungen. Sie können diesen Mechanismus ebenso für Meldungen benutzen, die zu von Ihnen geschriebenen Funktionen gehören.

Die Grundidee ist, daß jede Meldung einen eindeutigen Namen der Form symbol::tag hat. Mit diesem Namen können Sie auf die Meldung verweisen. (Das Objekt symbol::tag hat den Kopf MessageName.)

Kontrolle des Druckens von Meldungen

Mit On und Off kann das Drucken bestimmter Meldungen kontrolliert werden (siehe Abschnitt 1.3.11). Die meisten Meldungen, die zu eingebauten Funktionen gehören, sind in Voreinstellung angeschaltet. Mit Off können Sie diese ausschalten, falls Sie sie nicht sehen wollen.

Dies druckt eine Warnungsmeldung.

In[1]:= Log[a, b, c]

Out[1]=

Sie können die Meldung so wie hier abschalten.

In[2]:= Off[Log::argt]

Jetzt wird keine Warnungsmeldung erzeugt.

In[3]:= Log[a, b, c]

Out[3]=

Obgleich die meisten Meldungen, die zu eingebauten Funktionen gehören, in Voreinstellung eingeschaltet sind, gibt es einige, die in Voreinstellung abgeschaltet sind, und die nur zu sehen sind, wenn sie explizit eingeschaltet werden. Ein Beispiel ist die Meldung General::newsym, die in Abschnitt 2.6.13 behandelt wurde, die Ihnen jedesmal berichtet, wenn ein neues Symbol erzeugt wird.

Manipulation von Meldungen

Der Text einer Meldung mit dem Namen s::tag wird einfach als Wert von s::tag abgespeichert, das zum Symbol s gehört. Sie können daher den Text einer Meldung sehen, indem Sie einfach nach s::tag fragen. Sie können den Text durch Zuweisung eines Wertes zu s::tag festlegen.

Wenn Sie LinearSolve auf eine singuläre Matrix anwenden wollen, wird eine Warnungsmeldung gedruckt.

In[4]:= LinearSolve[{{1, 1}, {2, 2}}, {3, 5}]

Out[4]=

Hier ist der Text der Meldung.

In[5]:= LinearSolve::nosol

Out[5]=

Dies definiert die Meldung neu.

In[6]:= LinearSolve::nosol = "Vorgefundene Matrix ist nicht invertierbar."

Out[6]=

Jetzt wird die neue Form benutzt.

In[7]:= LinearSolve[{{1, 1}, {2, 2}}, {3, 5}]

Out[7]=

Meldungen werden immer als Zeichenketten gespeichert, die sich für den Einsatz mit StringForm eignen. Wenn die Meldung gedruckt wird, werden die geeigneten Ausdrücke in sie „eingefügt". Die Ausdrücke sind mit HoldForm eingehüllt, um die Evaluierung zu verhindern. Zusätzlich wird eine Funktion, die allenfalls der globalen Variablen $MessagePrePrint als Wert zugewiesen ist, auf die resultierenden Ausdrücke angewendet, bevor diese an StringForm übergeben werden. Die Vorgabe für $MessagePrePrint ist Short.

Die meisten Meldungen sind direkt an die Funktionen gebunden, die sie erzeugen. Es gibt jedoch einige „allgemeine" Meldungen, die von einer Vielzahl von Funktionen produziert werden können.

Wenn Sie einer Funktion F die falsche Anzahl Argumente übergeben, wird Mathematica Sie durch eine Meldung wie F::argx warnen. Kann Mathematica eine Meldung mit Namen F::argx nicht finden, wird es stattdessen den Text der „allgemeinen" Meldung General::argx nehmen. Mit Off[F::argx] können Sie speziell für die Funktion F die Meldung zur Argumentanzahl abschalten. Sie können auch mit Off[General::argx] alle Meldungen abschalten, die den Text der allgemeinen Meldung nutzen.

Mathematica druckt eine Meldung, wenn Sie einer eingebauten Funktion eine falsche Anzahl von Argumenten übergeben.

In[8]:= Sqrt[a, b]

Out[8]=

Diese Meldung zur Argument-Anzahl ist eine allgemeine, die von vielen verschiedenen Funktionen benutzt wird.

In[9]:= General::argx

Out[9]=

Wenn mit einer gerade durchgeführten Berechnung etwas sehr falsch läuft, so passiert es häufig, daß dieselbe Warnungsmeldung wieder und wieder erzeugt wird. Das ist meistens eher verwirrend als nützlich. Deshalb merkt Mathematica sich alle Meldungen, die während einer bestimmten Berechnung erzeugt werden, und stoppt die Ausgabe einer Meldung, wenn sie öfter als dreimal vorkommt. Wann immer dies passiert, druckt Mathematica zu Ihrer Information die Meldung General::stop. Wenn Sie wirklich alle Meldungen sehen wollen, die Mathematica zu drucken versucht, so müssen Sie General::stop ausschalten.

Herausfinden, welche Meldungen während einer Berechnung produziert wurden

Bei jeder Berechnung, die Sie durchführen, führt Mathematica eine Liste $MessageList mit allen produzierten Meldungen. In einer normalen Mathematica-Session wird diese Liste gelöscht, sobald die Ausgabezeilen jeweils erzeugt worden sind. Während einer Berechnung haben Sie jedoch Zugang zu der Liste. Sobald die n-te Ausgabezeile in einer Session erzeugt worden ist, wird außerdem der Wert von $MessageList MessageList[n] zugewiesen.

Dies gibt $MessageList zurück, eine Liste der erzeugten Meldungen.

In[10]:= Sqrt[a, b, c]; Exp[a, b]; $MessageList

Out[10]=

Die Meldungs-Namen sind mit HoldForm eingehüllt, um die Evaluierung zu verhindern.

In[11]:= InputForm[%]

Out[11]//InputForm= {HoldForm[Sqrt::argx], HoldForm[Exp::argx]}

Beim Schreiben von Programmen ist es oft wichtig, daß man automatisch feststellen kann, ob Meldungen während einer bestimmten Berechnung erzeugt wurden. Wenn Meldungen erzeugt wurden, zum Beispiel als Folge von unbestimmten numerischen Ergebnissen, so wird das Ergebnis der Berechnung unter Umständen sinnlos sein.

Auf Warnungsmeldungen achten

Die Evaluierung von 1^0 erzeugt keine Meldungen, daher wird das Ergebnis der Evaluierung zurückgegeben.

In[12]:= Check[1^0, err]

Out[12]=

Die Evaluierung von 0^0 erzeugt eine Meldung, also wird das zweite Argument von Check zurückgegeben.

In[13]:= Check[0^0, err]

Out[13]=

Check[ausdr, fehlausdr] achtet auf alle Meldungen, die tatsächlich ausgedruckt werden. Es achtet nicht auf Meldungen, deren Ausgabe durch Off unterdrückt wurde.

In einigen Fällen wollen Sie vielleicht nur auf einen bestimmten Satz von Meldungen achten, sagen wir auf jene, die bei numerischem Überlauf ausgegeben werden. Sie erreichen dies, indem Sie Check explizit die Namen von Meldungen mitteilen, auf die es achten soll.

Die Meldung, die von Sin[1, 2] erzeugt wird, wird von Check ignoriert, weil sie nicht spezifiziert wurde.

In[14]:= Check[Sin[1, 2], err, General::ind]

Out[14]=

Erzeugung von Meldungen

Mit der Funktion Message können Sie die Art, wie eingebaute Mathematica-Funktionen Meldungen erzeugen, vollständig nachahmen. Zum Beispiel können Sie Meldungen mit On und Off ein- oder ausschalten, und Message wird automatisch nach General::tag Ausschau halten, wenn es die Meldung s::tag nicht findet.

Dies definiert den Text einer Meldung, die an f gebunden wird.

In[15]:= f::overflow = "Fakultäts-Argument `1` ist zu groß."

Out[15]=

Hier ist die Funktion f.

In[16]:= f[x_] :=
If[x > 10,
(Message[f::overflow, x]; Infinity), x!]

Wenn das Argument von f größer als 10 ist, wird die Meldung erzeugt.

In[17]:= f[20]

Out[17]=

Dies schaltet die Meldung ab.

In[18]:= Off[f::overflow]

Jetzt wird die Meldung nicht mehr erzeugt.

In[19]:= f[20]

Out[19]=

Wenn Sie Message aufrufen, wird es zuerst versuchen, eine Meldung zu finden, die den von Ihnen spezifizierten expliziten Namen hat. Wenn dies mißlingt, versucht es eine Meldung zu finden, bei der die passende Etikette an das Symbol General gebunden ist. Schlägt auch dies fehl, so nimmt Mathematica eine Funktion, die Sie als Wert der globalen Variablen $NewMessage definiert haben, und wendet diese Funktion auf das Symbol und die Etikette der Meldung an, nach der Sie gefragt haben.

Durch geeignete Festlegung des Wertes von $NewMessage können Sie zum Beispiel erreichen, daß Mathematica den Text einer Meldung dann, wenn sie zum ersten Mal benötigt wird, von einer Datei einliest.

Eingabe anfordernInternationale Meldungen