からトラップPythonの例外は、私は1線式センサからの温度を取り、Redisのに温度を置くために、スクリプトに取り組んでいることはできません。このスクリプトはalias1.pyという名前のファイルから単線デバイスのリストを取得します。このファイルにはフレンドリ名と単線バスセンサーアドレスのペアが含まれ、順番にそれぞれの温度を取得します。しかし、センサが利用できない場合、私は例外をキャッチして、それを踏み越える必要があります。現時点では、これはちょうど6度に設定されていますが、後でその動作を変更する可能性があります。残念なことに私はこの問題に苦しんでおり、他のケースでは直接の並列性を見ることはできません。は、インポートされたモジュール
#!/usr/bin/python3
import logging
from onewire import Onewire
import redis
from alias1 import sensors
logging.basicConfig(level=logging.DEBUG)
room_float = {}
room_integer = {}
rooms ={}
ow = Onewire("%s:%d" % ("localhost", 4304))
for key in sensors:
roomID = sensors[key]
s = ow.sensor(roomID)
try:
temperature = s.read("temperature")
logging.info("found device %s (type = %s)" % (s.path,s.sensor_type))
except (RuntimeError, TypeError, NameError, AttributeError):
temperature = bytes([54])
logging.info("device or attribute not found %s")
rooms[key] = temperature
float_temp = float(temperature)
int_temp = int(float_temp)
r_server = redis.Redis('localhost')
r_server.hset(key, "temp_now", int_temp)
for文が見つからないセンサーに到達すると、スクリプトが無期限にハングし、コントロールcを押すだけで問題が表示されます。ところで、私は必死にそこにかなりの数の例外文を入れている:)
根本onewireモジュールのライン80 https://github.com/kipe/python-onewire/blob/master/onewire/init.pydef __getattr__(self, attr):
if attr not in self.attrs:
raise AttributeError('Attribute "%s" not found in %s.' % (attr, self.__str__()))
return self._ow.get(self.path, attr)
を見
File "./one-wire-redis-write2.py", line 17, in <module>
temperature = s.read("temperature")
File "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py", line 85, in read
return self.__getattr__(attr)
File "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py", line 80, in __getattr__
if attr not in self.attrs:
< Above line 80 repeated ad nauseum >
if attr not in self.attrs:
File "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py", line 107, in attrs
self._attrs = self._ow.get(self.path).split(',')
File "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py", line 33, in get
return _ow.get(str(os.path.join(self._path, *path)))
KeyboardInterrupt
「AtrributeErrorが上がっているようですが、私はできますそれをキャッチします。センサのアドレスが間違っているので、センサには「温度」という属性はありませんので、存在しませんので、例外を発生させる必要があります。どのようにこのエラーが表示され、
'' self.attrs'プロパティは、無限再帰のスパイラルを引き起こすように見えるよう、AttributeError'は到達しません引き上げます。しかし、私はループがどこにあるトレースバックの断片から分かりません。 –
コマンドラインから3つのコメントを分割しています。Python 3.4.0(デフォルト、Apr 11、2014、13:05:11) [GCC 4.8。2] on Linux >>> fromewire import onewire >>> ow = Onewire( "%s:%d"%( "localhost"、4304)) >>> s = ow.sensor( "28.02CA27060000" "温度= s.read("温度 ") >>> s = ow.sensor(" 28.12CA27060000 ") >>>温度= s.read("温度 ") –
^最新のCTraceback最後の呼び出し): ファイル ""、行1、 ファイル "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py"、85行目、読み取り中 return self .__ getattr__ (attr) ファイル "/usr/local/lib/python3.4/dist-packages/onewire/__init__.py"、80行目、__getattr__ attrがself.attrsにない場合: –