49379


Raspberry Piでservoモーターを動かしたいと思っています。  
以下のコードを動かすとエラーが出ました。

[code]

    import wirignpi
    import sys
    param  = sys.argv   #コマンドライン引数を格納したリストの取得コード
    if( -90<=int(param[1]) and int(param[1])<=90 ):
         set_degree = int(param[1]) #入力された値を配列
         print(set_degree)           #値をコマンドラインで表示
    else:
         print("please input -90~90 degree\n")
    
[/code]

以下のエラー文が出されました。

[code]

    Traceback (most recent call last):
      File "servo.py", line 13, in <module>
    　　 if( -90<=int(param[1]) and int(param[1])<=90 ):
    IndexError: list index out of range
    
[/code]

どのように対応すればよいでしょうか。  
よろしくお願いします。

追伸1:  
「引数の数」をチェックしてみました。

[code]

    import sys
    
    args = sys.argv
    arglen = len(args)
    
    print(arglen)
    print(args)
    print(args[1])
    print(args[2])
    print(args[3])
    quit()
    
[/code]

実効してみると以下の反応でした。

[code]

    $python3 a.py a b c
    4
    ['a.py', 'a', 'b', 'c']
    a
    b
    c
    
[/code]

追伸2:  
エラーの原因が分かりました。  
コマンドラインに引数を入れるのを忘れていました。

[code]

    $sudo python3 servo.py
    
[/code]

ではなく、

[code]

    $sudo python3 servo.py 45
    
[/code]

とすべきでした。  
ご協力ありがとうございます。


CC BY-SA 4.0
2018-10-17T05:34:00.123
49373
2018-10-17T07:09:05.477
2018-10-17T07:09:05.477
26270
26270
question
python raspberry-pi
python IndexErrorの対処法


引数を指定せずに実行した場合に`param[1]`の箇所で"index out of range"エラーが発生しているのだと思います。  
事前に「引数の数」をチェックしてみてはどうでしょうか？

[code]

    import sys
    argvs = sys.argv
    argc = len(argvs) # 引数の個数
    
    if (argc != 1):
        print 'Usage: # python %s degree' % argvs[0]
        quit()
    
[/code]


CC BY-SA 4.0
2018-10-17T06:34:09.713
49379
2018-10-17T06:34:09.713
3060
49373
answer