-1

メールをチェックし、新しいメールがあるときに LED をオンにする Python スクリプトを作成しました。約1時間後、エラーが発生しました:

Traceback (most recent call last):
  File "checkmail.py", line 10, in <module>
   B = int(feedparser.parse("https://" + U + ":" + P + "@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])
  File "/usr/local/lib/python2.7/dist-packages/feedparser.py", line 375, in __getitem__
    return dict.__getitem__(self, key)
KeyError: 'fullcount'

私はここを見まし たが、答えが見つかりませんでした。これが私のコードです:

#!/usr/bin/env python
import RPi.GPIO as GPIO, feedparser, time
U = "username"
P = "password"
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
A = 23
GPIO.setup(A, GPIO.OUT)
while True:
        B = int(feedparser.parse("https://" + U + ":" + P + "@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])
        if B > 0:
                GPIO.output(A, True)
        else:
                GPiO.output(A, False)
        time.sleep(60)

これをラズベリーパイで実行しています。助けてくれてありがとう。

4

1 に答える 1

1

デバッグ コードを追加して、この呼び出しが返す内容を確認する必要があります。

feedparser.parse("https://" + U + ":" + P + "@mail.google.com/gmail/feed/atom")["feed"]

明らかに「フルカウント」アイテムを含まないものです。次のようなことをしたいかもしれません:

feed = feedparser.parse("https://{}:{}@mail.google.com/gmail/feed/atom".format(U, P))
try:
    B = int(feed["feed"]["fullcount"])
except KeyError:
    # handle the error
    continue  # you might want to sleep or put the following code in the else block

そうすれば、スクリプトを壊すことなくエラーに対処できます (無効な値が原因で失敗ValueErrorした場合に備えて、キャッチすることもできます)。int()

于 2013-12-29T23:39:20.827 に答える