2017-10-10 5 views
-1

を発生した場合、私は時々、私は再実行するPythonスクリプトエラーが

File "//swigel_local/Shared/Resources/Tools/Twitter/Streaming/StreamingTwitter.py", line 68, in <module> 
    stream.filter(track=TRACK_TERMS) 

    File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\tweepy\streaming.py", line 445, in filter 
    self._start(async) 

    File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\tweepy\streaming.py", line 361, in _start 
    self._run() 

    File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\tweepy\streaming.py", line 294, in _run 
    raise exception 

    File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\tweepy\streaming.py", line 263, in _run 
    self._read_loop(resp) 

    File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\tweepy\streaming.py", line 313, in _read_loop 
    line = buf.read_line().strip() 

AttributeError: 'NoneType' object has no attribute 'strip' 

を取得し、これが私のプログラムを停止します、彼らのストリーミングAPIを使用してTwitterのデータをスクレイピングしています。このエラーが発生したときにプログラムを自動的に再実行できる方法はありますか?

私のコードは次のとおりです。エラーはなぜ起こるか私にはわからない

class StreamListener(tweepy.StreamListener): 

    def on_status(self, status): 
     if status.retweeted: 
      return 

     text = status.text 
     created = status.created_at 
     id_str = status.id_str 
     retweets = status.retweet_count 
     blob = TextBlob(text) 
     sent = blob.sentiment 

     table = db[settings.TABLE_NAME] 
     try: 
      table.insert(dict(
       text = text, 
       created = created, 
       id_str = id_str, 
       retweet_count = retweets, 
       polarity = sent.polarity, 
       subjectivity = sent.subjectivity, 
      )) 
     except ProgrammingError as err: 
      print(err) 


    def on_error(self, status_code): 
     if status_code == 420: 
      #returning False in on_data disconnects the stream 
      return False 
stream.filter(track=TRACK_TERMS) 

。しかし、私はそれが私が最近した変化に関係していると思います。

MySQLのmyテーブルにはutf8の照合順序がありますが、警告が表示され、記事が表示され、テーブルがutf8mb4ユニコードに変更されました。 警告が消えてプログラムがうまく動作します。しかし、時々、上記のエラーは、プログラムが実行されているときに発生します。

def _read_loop(self, resp): 
    charset = resp.headers.get('content-type', default='') 
    enc_search = re.search('charset=(?P<enc>\S*)', charset) 
    if enc_search is not None: 
     encoding = enc_search.group('enc') 
    else: 
     encoding = 'utf-8' 

    buf = ReadBuffer(resp.raw, self.chunk_size, encoding=encoding) 

    while self.running and not resp.raw.closed: 
     length = 0 
     while not resp.raw.closed: 
      line = buf.read_line().strip() 
      if not line: 
       self.listener.keep_alive() # keep-alive new lines are expected 
      elif line.isdigit(): 
       length = int(line) 
       break 
      else: 
       raise TweepError('Expecting length, unexpected value found') 
+0

を特定し、バグを修正するか、単に例外をキャッチし、あなたは、単にそのようなエラーを無視してはならない – Prateek

+2

それを無視応じてそれらを扱います。それはあなたのコードのエラーの良い兆候であり、未チェックのままにしておくと、そのコードの実行の大部分で発生する可能性があります。 'None'値を得ている理由と' None'(またはfalseyness)のチェックを行い、そのコードを実行しない、または潜在的な論理エラーを修正する理由を特定する方が良いでしょう。 –

答えて

0

Is there a way that I can rerun my program automatically when this error occurs?

あなたは、システムを監視し、アプリケーションのクラッシュを検出し、それを再起動する外部アプリケーションを書くことができます。

BUT私はそれをお勧めしません!

適切なソリューションは、次のとおりです。

  • 、この問題の原因を特定し、それを修正します! try .. exceptを使用して
  • ラップ問題のコードセグメントは、このようなエラー(例えばAttributeError)をキャッチし、
+0

私は問題の原因を特定できませんでした。あなたはそれを手伝ってくれますか? – Dylan

+1

@Dylan、エラーを見てください: 'AttributeError: 'NoneType'オブジェクトに属性 'strip'がありません。 'None'値から' strip'を呼び出していることがわかります。あなたが 'buf.read_line()。strip()'を呼び出すので、 'buf.read_line()'が 'None'を返すことを意味します。私は 'buf 'が何であるかを正確には知らないが、' EOF'と言う方法かもしれない。そのライブラリのマニュアルを読み、あなたの助言に感謝してAttributeError –

+0

を捨ててください。私は図書館に行き、オリジナルの投稿に関連する行を貼り付けました。ライブラリ内のコードを変更することはできますか? @Dylan。 – Dylan

関連する問題