質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

TypeError: expected str, bytes or os.PathLike object, not NoneTypeのエラー

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 9,430
退会済みユーザー

退会済みユーザー

TypeError: expected str, bytes or os.PathLike object, not NoneTypeとエラーが出ました。現在、以下のサイトを見て勉強しています。
http://www.buildinsider.net/small/booktensorflow/0201

# coding: utf-8

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os

import numpy as np
import tensorflow as tf
from PIL import Image

from reader import Cifar10Reader

FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('file',None,"処理するファイルのパス")
tf.app.flags.DEFINE_integer('offset',0,"読み飛ばすレコード数")
tf.app.flags.DEFINE_integer('length',16,"読み込んで変換するレコード数")

basename = os.path.basename(FLAGS.file)
path = os.path.dirname(FLAGS.file)

reader = Cifar10Reader(FLAGS.file)

stop = FLAGS.offset + FLAGS.length

for index in range(FLAGS.offset,stop):
    image = reader.read(index)

    print('label: %d' % image.label)
    imageshow = Image.fromarray(image.byte_array.astype(np.unit8))

    file_name = '%s-%02d-%d.png' % (basename,index,image.label)
    file = os.path.join(path,file_name)
    with open(file,mode='wb') as out:
        imageshow.save(out,format='png')

reader.close()


のファイルを実行したときに上記のエラーが出ました。
エラーの全体は
Traceback (most recent call last):
File "png10.py", line 20, in <module>
basename = os.path.basename(FLAGS.file)
File "/Users/XXX/anaconda/envs/py36/lib/python3.6/posixpath.py", line 144, in basename
p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

という内容です。
そもそもこのファイルは自分で作ったものではないです。
どこを直せばよいのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

参考にされているページのコード(リスト2.2)の直ぐ下に

処理するファイルをコマンドラインの引数に指定して実行すると、図2.3のような画像が、データセットと同じディレクトリに書き出されます。

$ python3 convert_cifar10_png.py --file ./data/data_batch_1.bin

との記述があると思います。

このように実行時に --file [ファイルパス] を指定していない場合、エラーとなります。

簡単に理由を説明すると

サンプルコードの

tf.app.flags.DEFINE_string('file', None, "処理するファイルのパス")

の行で、起動時に引数 --file  を取れるように設定しており、引数を指定して起動すると、その値は FLAGS.file に値が入ります。
が、逆に引数を指定しない場合はFLAGS.file値は None になります。

その為、エラーが発生している行

basename = os.path.basename(FLAGS.file)


にて、
os.path.basenameの引数がNoneType なの処理できないよ」
とのエラーが発生している訳です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/20 10:49

    ありがとうございます。
    $ python3 convert_cifar10_png.py --file ./data/data_batch_1.bin の
    ./data/data_batch_1.bin に該当する部分は学習させたいデータのファイルという認識で合っていますか?例えばコードと同じディレクトリにファイルを用意してその中に学習させたいデータを入れたときに、その画像が入ったファイルのディレクトリを --file以降に書くということですよね?

    キャンセル

  • 2017/04/20 11:06

    該当のコードは、使用するデータがCIFAR-10という特殊バイナリー形式なので、一般的なPNG形式に変換するためのコードのように見えます。
    ですので、指定するファイルは
    The CIFAR-10 dataset : https://www.cs.toronto.edu/~kriz/cifar.html
    からダウンロードしたファイルなのではないでしょうか。

    > Pythonで直接読み込める形式(Pickle形式)が用意されてますが、
    > 今回はバイナリ形式の「CIFAR-10 binary version (suitable for C programs)」
    > をダウンロードします。

    キャンセル

  • 2017/04/20 11:09

    なるほど!ありがとうございます。やってみます!

    キャンセル

0

自分はtensorflowとかpythonに暗いですが、ここteratailでの過去の質問なんかを眺めてて以下を推測しました。違ってたらスミマセン

エラーが出ている行は以下ですが、

basename = os.path.basename(FLAGS.file)

引数は少し上の方にあるFLAGS = tf.app.flags.FLAGSです。これはtensorflow利用プログラムの作成者が自由にコマンド引数をカスタマイズできて、コマンドに与えた情報が記録される場所だと思います。

お使いのプログラムがxxx.pyなら--helpという引数を指定して実行してみたらどうなるでしょうか?ちゃんと作ってあるプログラムなら、そのプログラムに指定すべきオプション引数の説明が表示され、その中にfileオプションの説明がでてくると思います。

$ python xxx.py --help

usage: xxx.py [-h] ...

optional arguments:
  -h, --help           show this help message and exit
...
  -f, --file           この引数の説明
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る