Seite 1 von 1

try: serial.open() - pySerial Fehler abfangen

Verfasst: Samstag 1. November 2008, 18:55
von arghargh
Leider funktioniert das nicht so wie ich's mir vorstelle:

Code: Alles auswählen

	ser = serial.Serial(
		port=serialport,
		baudrate=thebaudrate,
		parity=serial.PARITY_NONE,
		stopbits=serial.STOPBITS_ONE,
		bytesize=serial.EIGHTBITS,
		timeout = 1
	)
	try:
		ser.open()
	except serial.SerialException:
		exit("Cannot open serial port")
Wenn der Port aus einer anderen Anwendung geöffnet ist bekomme ich folgenden Fehler

Code: Alles auswählen

Traceback (most recent call last):
  File "ser.py", line 692, in <module>
    connect()
  File "ser.py", line 554, in connect
    serial_open(options.serialport,max(baudrates))
  File "ser.py", line 244, in serial_open
    timeout = 1
  File "C:\Programme\python\lib\site-packages\serial\serialutil.py", line 171, in __init__
    self.open()
  File "C:\Programme\python\lib\site-packages\serial\serialwin32.py", line 53, in open
    raise SerialException("could not open port %s: %s" % (self.portstr, msg))
serial.serialutil.SerialException: could not open port COM1: (5, 'CreateFile', 'Zugriff verweigert')
Wie fängt man sowas ab?

Verfasst: Samstag 1. November 2008, 18:57
von Leonidas
Indem man ``serial.serialutil.SerialException`` abfängt?!

Verfasst: Samstag 1. November 2008, 19:03
von arghargh

Code: Alles auswählen

	except serial.SerialException, serial.serialutil.SerialException:
Leider der selbe Fehler. Ich dachte eigentlich, dass das Abfangen dieses Fehlers Aufgabe von serial ist?

Ich werd's morgen mal mit einem Testprogramm versuchen.

Verfasst: Samstag 1. November 2008, 19:09
von gerold
Hallo arghargh!

Der Fehler tritt wahrscheinlich schon eine Zeile vorher (``serial.Serial(...``) auf. Beim Initialisieren der Klasse wird der Port automatisch geöffnet.

mfg
Gerold
:-)

Verfasst: Samstag 1. November 2008, 20:47
von name
arghargh hat geschrieben:

Code: Alles auswählen

	except serial.SerialException, serial.serialutil.SerialException:
Leider der selbe Fehler. Ich dachte eigentlich, dass das Abfangen dieses Fehlers Aufgabe von serial ist?

Ich werd's morgen mal mit einem Testprogramm versuchen.

Code: Alles auswählen

	except (serial.SerialException, serial.serialutil.SerialException):
Deins faengt eine serial.SerialException ab und bindet sie an den Namen serial.serialutil.SerialException. Gottseidank wird das mit Python 3.0 anders, wo es dann zu "except FooError as bar" wird.

Code: Alles auswählen

>>> try:
...     raise ValueError
... except TypeError, ValueError:
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError
>>> try:
...     raise TypeError
... except TypeError, ValueError:
...     print ValueError.__class__ == TypeError
... 
True
>>> try:
...     raise ValueError
... except (TypeError, ValueError):
...     print "Ooops!"
... 
Ooops!
>>> 

 
Vielleicht hilft das Beispiel.

Verfasst: Samstag 1. November 2008, 21:04
von Trundle
@name: ``except Exception as exc`` funktioniert schon mit Python 2.6.

Verfasst: Sonntag 2. November 2008, 13:43
von arghargh
Tatsächlich, wenn die Instanz mit Parametern erzeugt wird, wird der Port gleich geöffnet:
http://pyserial.wiki.sourceforge.net/py ... cpySerial8

Danke für die Hilfe.