• 締切済み

pythonで例外になってしまう原因

import smbus import time bus = smbus.SMBus(1) address = 0x1D x_adr = 0x32 y_adr = 0x34 z_adr = 0x36 def init_ADXL345(): bus.write_byte_data(address,0x2D,0x08) def measure_acc(adr): acc0 = bus.read_byte_data(address,adr) acc1 = bus.read_byte_data(address,adr + 1) acc = (acc1 << 8) + acc0 if acc > 0x1FF: acc = (65536 - acc) * -1 acc = acc * 3.9 / 1000 return acc try: init_ADXL345() while 1: x_acc = measure_acc(x_adr) y_acc = measure_acc(y_adr) z_acc = measure_acc(z_adr) print 'X = % 2.2f' % x_acc,'[g] Y = % 2.2f' % y_acc,'[g], Z = % 2.2f' % z_acc,'[g]' time.sleep(0.5) except KeyboardInterrupt: pass この3軸のジャイロセンサを動かすプログラムなのですが x_adr,y_adr,z_adrを計算しx_acc,y_acc,z_accとしてprintで表記したいのですが 動作させると最後のpassで動作が成されません。 プログラムのどこかがおかしくて例外として検出されpassとなって 測定できない結果となると思うのですがどの部分がおかしいのか わかりませんか?

みんなの回答

回答No.2

インデントむちゃくちゃでも行番号がないと説明しづらいので。 1 import smbus 2 import time 3 bus = smbus.SMBus(1) 4 address = 0x1D 5 6 x_adr = 0x32 7 y_adr = 0x34 8 z_adr = 0x36 9 10 def init_ADXL345(): 11 bus.write_byte_data(address,0x2D,0x08) 12 13 def measure_acc(adr): 14 acc0 = bus.read_byte_data(address,adr) 15 acc1 = bus.read_byte_data(address,adr + 1) 16 acc = (acc1 << 8) + acc0 17 if acc > 0x1FF: 18 acc = (65536 - acc) * -1 19 acc = acc * 3.9 / 1000 20 return acc 21 try: 22 init_ADXL345() 23 while 1: 24 x_acc = measure_acc(x_adr) 25 y_acc = measure_acc(y_adr) 26 z_acc = measure_acc(z_adr) 27 print 'X = % 2.2f' % x_acc,'[g] Y = % 2.2f' % y_acc,'[g], Z = % 2.2f' % z_acc,'[g]' 28 time.sleep(0.5) 29 30 except KeyboardInterrupt: 31 pass 画像からなんとなく見える感じでいろいろおかしい気がします。 21行目のtryが17行目のifと同じ段になっているように見えますが、これって正しいんですか? また、17行目ifがTrueとならなかった場合、measure_accの返り値はNoneになりますが、それを27行目のprintで受けてもいいのでしょうか。 おそらく、18行目だけ段を下げ、19、20行目は17行目と同じ高さ。 21行目のtryは字下げまったくしないで関数の外のプログラムとして実行。 のほうがしっくりくる動作な気がします。 このプログラムが何をするプログラムかは知りませんが。

回答No.1

インデントが無いのでこのプログラムでは動かないです。

関連するQ&A