Chris Angelico wrote: > 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.
I'd suggest a more conservative path: if available install the version that comes with your distribution. $ sudo apt-get python3-serial might do the job. > 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