title: Python SerialException: Device reports readiness to read but returned no data (device disconnected?)
body: <p>I've got two Raspberry Pi's sending data to each other using the Serial Port and a pair of XRF Radio's. Generally they work fine and the full program loops multiple times but every once in a while one of them stops the program with a error along the lines of:</p>
  
  <pre><code>File "BaseListener.py, line 56, in &lt;module&gt;
  recieved=serialport.read()
  File "/usr/lib/python2.7/dist-packages.serial/serialposix.py", line 465, in read raise SerialException('Device reports readiness to read but returned no data (device disconnected?)')
  serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
  </code></pre>
  
  <p>My Code is:</p>
  
  <pre><code>import sys
  import serial
  import time
  import datetime
  
  date = datetime.date.today()
  strdate = str(date)
  serialport=serial.Serial("/dev/ttyAMA0", 9600, timeout=0.25)
  command=''
  loop=0
  recieving=False
  recieving2=False
  format = "%Y-%m-%d %H:%M:%S"
  
  while True:
      while (recieving==False):
          loop = 0
          command=''
          while (loop&lt;30):
              recieved = serialport.read()
              command = command + recieved
              loop = loop+1
          if "DR" in command:
              print"DR Recieved"
              serialport.write("BSAKAKBS")
              recieving=True
      while (recieving ==True):
          loop = 0
          command=''
          while (loop&lt;30):
              recieved = serialport.read()
              command = command + recieved
              loop = loop+1
          sensorid = command[0:2]
          print ("Command: "+command)
          print ("SensorID: "+sensorid)
          graintemp = command[2:6]
          print "GrainTemp Recieved"
          serialport.write("BS"+graintemp+"BS")
          print (str(graintemp))
          loop = 0
          command=''
          while (loop&lt;30):
              recieved = serialport.read()
              command = command + recieved
              loop = loop+1
          if sensorid in command:
              if "AK" in command:
                  print "GrainTemp AK recieved"
                  serialport.write("BSAKAKBS")
                  recieving2=True
                  while (recieving2==True):
                      loop=0
                      command=''
                      while (loop&lt;30):
                          recieved = serialport.read()
                          command = command + recieved
                          loop = loop+1
                      print ("Command: "+command)
                      airtemp = command[2:6]
                      print "AirTemp Signal Recieved"
                      serialport.write("BS"+airtemp+"BS")
                      print ("AirTemp: "+str(airtemp))
                      loop = 0
                      command=''
                      while (loop&lt;30):
                          recieved = serialport.read()
                          command = command + recieved
                          loop = loop+1
                      if sensorid in command: 
                          if "AK" in command:
                              print ("AK command: ")
                              print "AirTemp AK Recieved"
                              serialport.write("BSAKAKBS")
                              #File Storage
                              today = datetime.datetime.today()
                              fulltime = today.strftime(format)
                              strtime = str(fulltime)
                              graindata = fulltime + ' ' + graintemp +'\n'
                              airdata = fulltime + ' ' + airtemp +'\n'
                              file = open(sensorid+"Graindata.dat", "a")
                              file.write(graindata)
                              file.close
                              file = open(sensorid+"Airdata.dat", "a")
                              file.write(airdata)
                              file.close
                              recieving=False
                              recieving2=False
                              loop=0
                              command=''
                              graindata=''
                              airdata=''
                              graintemp=0
                              airtemp=0
                              print "Files stored. Restarting"
                          else:
                              print ("IC Command: ")
                              print "Airtemp IC Recieved"
                              serialport.write("BSICICBS")
                              loop = 0
                              command=''
                      else:
                          print "Airtemp ID IC Recieved"
                          serialport.write("BSICICBS")
                          loop = 0
                          command=''
              else:
                  serialport.write("BSICICBS")
                  print "Graintemp IC Recieved"
                  loop = 0
                  command=''
          else:
              serialport.write("BSICICBS")
              print "Graintemp ID IC Recieved"
              loop = 0
              command=''
  </code></pre>
  
  <p>The code on the other Pi is similar (I can provide if needed).</p>
  
  <p>From what I've found online, it's some issue to do with trying to read the serial port but it being empty. I've seen suggestions to use a try and catch exception but im not sure that will help (or know how to do that really). I need the code to run continuously without any interference at all from a user. If the serial port is empty then the AK and IC loops should pick it up the same as an incorrect transmission so I just need it to pass the empty value on. 
  Is there any way to do this?</p>