On Mon, Nov 17, 2014 at 3:10 PM, Peter Bell <pe...@bellfamily.org.uk> wrote: > Many thanks for your helpful response, Chris. > > On 17/11/14 06:13, Chris Angelico wrote: >> >> On Sun, Nov 16, 2014 at 7:11 PM, Peter Bell <pe...@bellfamily.org.uk> >> wrote: >>> >>> File "/usr/lib/python3.4/site-packages/serial/serialposix.py", line >>> 480, >>> in read >>> if e[0] != errno.EAGAIN: >>> TypeError: 'InterruptedError' object is not subscriptable >>> ===================================================================== >>> >>> >>> I'm not sure how to address the 'InterruptedError'. Can it/should it be >>> masked at the user code level with a 'try:' block? Or is there another >>> way >>> to deal with it? >> >> >> At this stage, you're not getting it, because of the cascaded error, >> so that's the thing to deal with. > > > Okay - I was just thinking that if the 'InterruptedError' didn't occur, then > the 'TypeError' would never be exposed!
Correct. The handling of InterruptedError (a subclass of OSError) is what's raising TypeError. > Ah, I understand. I believe, then, that this is from the pyserial module, > fetched from sourceforge. > > I see, now, that the sourceforge download does specify 'pyserial-2.7.tar.gz' > and, yes, I'm working in Python 3. I see, from other comments around the > web, that I'm not the only person to be attempting to use this module with > 3. > > Given that pyserial is for 2.7, it is probably unreasonable to report errant > behaviour when run on Python 3. Yes and no. It may be possible to alter the code to be 2/3 compatible; for instance, if e.errno is used instead of e[0], it should work in both 2.7 and 3.x. (I haven't confirmed this, though.) But keep reading. > I'm teaching myself (and the kids, as I go) Python and felt, rightly or > wrongly, that it would be better to start with Python 3, rather than > learning the older Python 2.x. You felt rightly. All you need is... > Is there a better way to interface to a serial port from Python 3? I've > found a reference in the PSF 3.3.6 FAQ which points to pyserial on > sourceforge. ... a solution to this. I would suggest looking on PyPI, the Python Package Index, to see what you can get for Python 3. In your case, you may well be in luck: https://pypi.python.org/pypi/pyserial There's a version that claims to work with any Python version (though there's some minor disagreement; the metadata says 2.3-2.7 and 3.0-3.3, but the Windows binaries say 2.4-2.7 and 3.0-3.4). I suspect the "2.7" in the name is actually the version of PySerial, and it's coincidental that that happens also to be a Python version. Since you seem to be on a POSIX system, you shouldn't need to worry about the provided binary installers. Use pip3 to install it for your Python 3, and you should be all set. Now, since the package does claim to support Python 3, any discrepancies between that claim and the actual results you're seeing *are* reportable bugs. But it's entirely possible that using pip to install it will sort all that out, as it'll go and grab the correct version. All the best! ChrisA -- https://mail.python.org/mailman/listinfo/python-list