Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  ErrorHandler

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  ErrorHandler (855 mal gelesen)
rkauskh
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. (FH) Versorgungstechnik



Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

erstellt am: 08. Mai. 2009 12:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Ich habe mir den einfachen ErrorHandler bei Mapcar "geklaut", aber da scheint der Wurm drin zu sein.
Hier nochmal der Code:

Code:
;;;der Error-Handler von Mapcar
(defun startErrorHandler(varsToSave / )
(command "_undo" "_begin")
(foreach pair varsToSave
(setq *saveList*
(cons
(cons (car pair) (getvar(car pair)) )
saveList
)
)
(setvar(car pair)(cdr pair))
)
(setq *oldError* *error*)
(setq *error* myErrorFunction)
)


(defun endErrorHandler( / )
  (*error* nil)
)


(defun myErrorFunction (msg / )
(if (= (getvar "cmdactive") 0)
(progn
(command "_undo" "_end")
(foreach pair *saveList*
(setvar(car pair)(cdr pair))
)
(setq *saveList* nil)
(setq *varsToSave* nil)
(setq *error* *oldError*)
(setq *oldError* nil)
)
)
)


Aufgerufen wird er mit:

Code:
(startErrorHandler '(("osmode" . 0) ("cmddia" . 0) ("filedia" . 0) ("cmdecho" . 0)))

Die Systemvariablen werden bei einem Abbruch leider nicht wiederhergestellt. Ich bin ratlos wo der Fehler stecken könnte.

------------------
MfG
RK

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 08. Mai. 2009 12:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rkauskh 10 Unities + Antwort hilfreich

hi
schau dir mal vl-catch-all-error-p und vl-catch-all-apply ... an.
oder die Suche nutzen
Fehler abfangen, auswerten und/aber Programm läuft weiter...

mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. (FH) Versorgungstechnik



Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

erstellt am: 08. Mai. 2009 23:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Werd ich machen. Das könnte eventl. auch gleich mein zweites Problem mit lösen. Beim Export in ein DXF beendet sich mein LISP wenn die Zieldatei schon existiert. Für den Fall sollte *error* für einen sauberen Abgang suchen. Sollte vl-catch-all-error-p & Co den Fehler handlen und das Prog fortsetzen können, wäre das noch besser.

Ich geh erstmal lesen.

------------------
MfG
RK

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 09. Mai. 2009 09:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rkauskh 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rkauskh:
Hallo

Beim Export in ein DXF beendet sich mein LISP wenn die Zieldatei schon existiert. Für den Fall sollte *error* für einen sauberen Abgang suchen. Sollte vl-catch-all-error-p & Co den Fehler handlen und das Prog fortsetzen können, wäre das noch besser.


da macht man dann sowas ... :
(setvar "filedia" 0)
(if(findfile "meine.dxf")
  (command "_saveas" "dxf" 16 "meine.dxf"  "_y")
  (command "_saveas" "dxf" 16 "meine.dxf"  )
)
(setvar "filedia" 1)


oder probier mal
(command "_dxfout" "meine.dxf" "_V" "r12" 16 )

aber catchen ist auch nicht verkehrt, damit kann man dann auch noch fehlende Schreibrechte ect. abfangen

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 11. Mai. 2009 08:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rkauskh 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von rkauskh:
Ich habe mir den einfachen ErrorHandler bei Mapcar "geklaut", aber da scheint der Wurm drin zu sein.

Hi rkauskh,

Du sagt "den einfachen Errorhandler", das heißt diesen Thread bzw. den bei cad.de gemeinsam weiterentwickelten Errorhandler kennst Du bereits? http://ww3.cad.de/foren/ubb/Forum145/HTML/000435.shtml#000021
Der Vollständigkeit halber wollte ich den zumindest erwähnt haben, denn an dem Ding haben wir bei cad.de (inklusive Axel und Achim) schon recht viel gefeilt. Für meine Zwecke ist der absolut idiotensicher und verrichtet seit Jahren seinen Dienst ohne murren und perfekt.

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 11. Mai. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. (FH) Versorgungstechnik



Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

erstellt am: 12. Mai. 2009 08:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Kommentarlos überschreiben möchte ich das bestehende File nicht, damit der User wenigstens einen Hinweis bekommt, das er mal prüfen müßte, warum eigentlich 2 namensidentische Dateien erzeugt werden. Der Name wird aus einer eindeutigen Nummer gebildet, die eigentlich nicht doppelt vorkommen kann. Ich versuche mich grad an vl-catch-all-error.

Mit "einfach" meinte ich, daß bei Mapcar ja noch ein zweiter Handler beschrieben ist, der mehr kann. Der überfordert aber mein aktuelles LISP-Wissen und ich verstehe gern was ich da mache.
Das sollte keine abwertende Bemerkung sein, falls das so rübergekommen ist.

------------------
MfG
RK

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 13. Mai. 2009 08:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rkauskh 10 Unities + Antwort hilfreich

  
Zitat:
Original erstellt von rkauskh:
...daß bei Mapcar ja noch ein zweiter Handler beschrieben ist, der mehr kann. Der überfordert aber mein aktuelles LISP-Wissen und ich verstehe gern was ich da mache.

Nun ja, bei komplexen Funktionen vom seligen Axel geht das nicht nur Dir so. Ich hab' so das ein oder andere Schätzchen in meiner Bibliothek das von Axel kommt. Immer irgendwelche komplexen, rekursiv arbeitenden Dreizeiler die ich einfach als BlackBox ansehe...
Eingabe durchjagen und sicher sein das der Output genau so rauskommt wie versprochen. Verstehen tue ich das ein oder andere Ding nur im Ansatz; manchmal gar nicht ;-) Dir noch viel Spaß beim Error-Handeln!

Ich zitiere noch mal den Axel:

Zitat:

Wer versteht denn schon was von dem ganzen 'grünen' Code in Visual C++ (= irgendwelche Wizard-Makros)? Wir benutzen auch die vla-curve-...-Funktionen, ohne den mathematischen Hintergrund zu verstehen. Mein Reden ist ja auch immer: Warum ständig das Rad neu erfinden? Dieser Handler soll funktionieren und anwenderfreundlich sein. Verstehen? Gerne - muss aber nicht sein. Er soll auch mit chaotischen Anfänger[n|programmen] laufen.


Aus: http://ww3.cad.de/foren/ubb/Forum145/HTML/000435.shtml#000035


------------------
Ciao,
Marc
    

[Diese Nachricht wurde von marc.scherer am 13. Mai. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. (FH) Versorgungstechnik



Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2166
Registriert: 15.11.2006

erstellt am: 14. Mai. 2009 10:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Ich habe jetzt mit vl-catch-all-apply das Überschreiben einer bestehenden Datei geregelt und den Programmabbruch verhindert. Für das gesamte LISP habe ich die *error*-Funktion von oben genommen. Funktioniert soweit.
Da ich eigentlich den gesamten Code "zusammengeklaut" habe, teilweise von mapcar, teilweise hier im Forum, würde ich das Resultat gern allen zur Verfügung stellen. Gibt es dafür eine zentrale Möglichkeit?

Der Vollständigkeit halber, in dem Code von oben mußte die fettgedruckte Zeile noch geändert werden, dann lief es.

[CODE][/;;;der Error-Handler von Mapcar
(defun startErrorHandler(varsToSave / )
(command "_undo" "_begin")
(foreach pair varsToSave
(setq *saveList*
(cons
(cons (car pair) (getvar(car pair)) )
*saveList*
)
)
(setvar(car pair)(cdr pair))
)
(setq *oldError* *error*)
(setq *error* myErrorFunction)
)


(defun endErrorHandler( / )
  (*error* nil)
)


(defun myErrorFunction (msg / )
(if (= (getvar "cmdactive") 0)
(progn
(command "_undo" "_end")
(foreach pair *saveList*
(setvar(car pair)(cdr pair))
)
(setq *saveList* nil)
(setq *varsToSave* nil)
(setq *error* *oldError*)
(setq *oldError* nil)
)
)
)CODE]

------------------
MfG
RK

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz