Raspberry Pi から IRKitを操作する。三歩半
バグだけ直しておきましょ
listサブコマンドのバグだけ直しておきますかね。listサブコマンドの関数は以下のようになっています。
def list(dir):
'''List sub-command'''
for file in os.listdir(dir):
print(file.rstrip('.json')) # ←ここバグってます
|
バグの原因は '.json' 拡張子を削除するために str.rstript() を使っていることですね。str.rstript() の引数は除去される文字集合を指定する文字列なので、ファイル名末尾の '.json' 拡張子を削除するために使用するのは相応しくなかったのです。このような使用方法の場合、ファイル名末尾から {'.', 'j', 's', 'o', 'n'} の何れかの文字がある限り、その文字が除去されてしまうのですと。具体的には 'tv-on.json' というファイル名だった場合、'tv-on.json'.rstript('.json') の結果は 'tv-' になるのですね。実際にやってみると、
$ python3
>>> 'tv-on.json'.rstrip('.json')
'tv-'
|
となります。'.json'拡張子だけでなく 'on' まで除去されてしまって、listサブコマンドの結果が正しくないというバグになってしまったのでした。
意図したのはファイル名から '.json' 拡張子を除去した名前だけを表示したいという事ですので、以下のように修正してみました。
def list(dir):
'''List sub-command'''
for file in os.listdir(dir):
print(os.path.splitext(file)[0])
|
os.path.splitext() で拡張子を取り除いています。これでどうかな?
それにしても、たかだか100数十行のプログラムでも必ず幾つかのバグが入り込むもんなのですよね〜。今回の原因は仕様の理解や確認が足りないって事だな。もしも仕事でこんなバグ作り込んでたら、どえらい大変なことになるので、プログラマなんて職業は選ばない方が良いですよ。(^^;)
|