超初心者です。
Amazonで以下を購入して、Githubのサンプルコードで動かそうとしています。
https://www.amazon.de/gp/product/B07D8S617X/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&th=1
https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/tree/legacy/Adafruit_BMP085
Adafruit_BMP085_example.pyを実行し、エラーが出るたびに修正しています。
プログラム内で呼び出された、Adafruit_BMP085.pyの修正で行き詰りました。
Adafruit_BMP085.pyの150行目で、
Python
1# Read raw temp before aligning it with the calibration values 2UT = self.readRawTemp() 3X1 = ((UT - self._cal_AC6) * self._cal_AC5) >> 15 4X2 = (self._cal_MC << 11) / (X1 + self._cal_MD) 5B5 = X1 + X2 6temp = ((B5 + 8) >> 4 / 10.0) #ここで「TypeError: unsupported operand type(s) for >>: 'float' and 'int'」 7if (self.debug): #ここで「SyntaxError: invalid syntax」 8 print("DBG: Calibrated temperature = %f C" % temp) #上の:を消すと、ここで「SyntaxError: invalid syntax」 9return temp
ifがあるので、:は要ると思っていますが、入れても解消しません。
そもそもその上のtempのところで、floatとintを揃えろ、とのエラーが出て、
あれこれしているうちに出なくなったので、ここのせい?とも疑っています。
よろしくお願いいたします。
閉じ括弧が足りません。
temp = ((B5 + 8) >> 4 / 10.0
ありがとうございます。
閉じかっこ追記しました。
ifのsyntaxerrorが出てきます...。
>> よりも / の方が演算の優先順位が高いので、((B5 + 8) >> 4 / 10.0) でエラーになるはずです。実際には
((B5 + 8) >> 4) / 10.0
とするのではないでしょうか?
エラーが出たなら、エラーメッセージを提示しましょう
エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
ありがとうございます。
temp = ((B5 + 8) >> 4) / 10.0
にしたところ、
TypeError: unsupported operand type(s) for >>: 'float' and 'int'
になりました。先に出ていたエラーです。
なるほど、B5 が float 型なのですね。そうなりますと、(B5 + 8) >> 4 の式自体がおかしい、という事になります。
GitHub のコードをみて判りました。元のコードは Python2 で書かれています。なので、
X2 = (self._cal_MC << 11) / (X1 + self._cal_MD)
の X2 は int になりますが、Python3 では float になります。// とすることで X2 が整数になります。
X2 = (self._cal_MC << 11) // (X1 + self._cal_MD)
回答1件
あなたの回答
tips
プレビュー