AssertionError - wer weiß wieso?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hans-Uwe
User
Beiträge: 56
Registriert: Dienstag 16. Januar 2018, 16:26

Hi,

ich arbeite mit dem Python-Tool "PyZDDE", das mir hilft Skripte für eine Optik-Simulationssoftware zu schreiben.

Dafür gibt es in der PyZDDE-Erweiterung einige Funktionen. Ich benutze folgende:

Code: Alles auswählen

#Detector Rectangle

ln.zInsertNSCDetectorRectangle(surfNum = 1, objNum = 4, x = XPosition_DetRect, y = YPosition_DetRect, z = ZPosition_DetRect,
                               tiltX = TiltX_DetRect, tiltY = TiltY_DetRect, tiltZ = TiltZ_DetRect, xHalfWidth = XHalfWidth_DetRect,
                               yHalfWidth = YHalfWidth_DetRect, numXPix = NumXPixels_DetRect, numYPix = NumYPixels_DetRect, material = Material__DetRect,
                               dType = DataType_DetRect, fntOnly = FrontOnly_DetRect, refObjNum = RefObject_DetRect, insideOf = InsideOf_DetRect,
                               color = Color_DetRect, smooth = Smoothing_DetRect, scale = Scale_DetRect, pltScale = PlotScale_DetRect,
                               psfWaveNum = PSFWave_DetRect, xAngMin = XAngleMin_DetRect, xAngMax = XAngleMax_DetRect,
                               yAngMin = YAngleMin_DetRect, yAngMax = YAngleMax_DetRect, pol = Polarisation_DetRect, mirror = Mirroring_DetRect)
Für die letzte Zeile, also:

Code: Alles auswählen

yAngMin = YAngleMin_DetRect, yAngMax = YAngleMax_DetRect, pol = Polarisation_DetRect, mirror = Mirroring_DetRect)
bekomme ich einen AssertionError. Ich weiß nur, dass dieser Error dann kommt, wenn ein Ausdruck unmöglich verarbeitbar ist. Die Parameter YAngleMin_DetRect, YAngleMax_DetRect, usw. habe ich aus einer .csv ausgelesen. Das klappt auch ganz sicher 100%ig.

Der Error-Code sieht wie folgt aus:

Code: Alles auswählen

Traceback (most recent call last):
  File "H:/Simulation/Zemax/test_zemax_model.py", line 172, in <module>
    srcX = SourceX_SourceRect, srcY = SourceY_SourceRect, color = ColorNum_SourceRect)
  File "C:\PyZDDE\pyzdde\zdde.py", line 10928, in zInsertNSCSourceRectangle
    'Error in setting NSC object code {}'.format(code)
AssertionError: Error in setting NSC object code 6
Den Quellcode, in dem der Code 6in Zeile 10928 beschrieben sein soll, findet ihr hier: https://github.com/indranilsinharoy/PyZ ... de/zdde.py

Kann mir einer von euch sagen ob, und wie vielleicht sogar wie, ich den Fehler beheben kann? :-)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das hat mit der letzten Zeile nichts zu tun. Das ist schon der gesamte Aufruf, der da in die Binsen geht. Der erstreckt sich nur ueber mehrere Zeilen, und das ist halt die letzte. Irgendeine muss Python ja nehmen, um den Fehler zu markieren.

Den Parameter den er nicht gesetzt bekommt ist InsideOf_DetRect. Das ist das data-Argument fuer zSetNSCObjectData. Warum das nicht geht - keine Ahnung.
Benutzeravatar
__blackjack__
User
Beiträge: 14135
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Naja, Du bekommst den nicht für die letzte Zeile sondern für den Aufruf von der Methode.

`AssertionError` sollte eigentlich nur dann kommen wenn ein Fehler in der Funktion/Methode ist die Du aufgerufen hast.

Allerdings haben die ``assert`` wohl auch nicht so richtig verstanden, denn das darf keinen Effekt haben auf den man sich verlässt, weil das nicht ausgeführt werden muss. Die verwenden ``assert`` aber für lauter Sachen die passieren *müssen*.
“It is easier to change the specification to fit the program than vice versa.” — Alan J. Perlis
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__ der Code ist so ziemlich das grausamste, was ich seit langem gesehen habe... Dafuer kann Hans-Uwe natuerlich nix, aber das ist wirklich obergrausam...
Hans-Uwe
User
Beiträge: 56
Registriert: Dienstag 16. Januar 2018, 16:26

__deets__ hat den Fehler richtig erkannt (ich habe es gerade doch noch alleine hinbekommen, bevor ich hier reingeguckt habe :-P ). Da ich alles andere als gut programmieren kann, konnte ich mit dem Error-Code in dem Quellcode nicht so wirklich was anfangen. Ich habe dann mit der entsprechenden Funktion in einem kleinen Skript rumprobiert und kam auf genau die fehlerhafte Eingabe des "InsideOf_DetRect"-Parameters.

Um euch das jetzt genauer zu erklären, müsstet ihr Zemax OpticStudio kennen. Kennt ihr bestimmt nicht, deswegen lasse ich das. :-D
Antworten