質問事項
range(len(i)))のような使い方をした、呼び出す順番は決まっていますか?
取り組んでいることと発生している事象
現在、Pathlibを使用し画像の一括編集に取り組んでいます。次のようなコードを実行すると” object of type 'generator' has no len()”エラーが発生します。
python
1def test03(): 2 from PIL import Image, ImageDraw , ImageFont 3 import pathlib 4 5 p = pathlib.Path("/Users/xxxx/bulk/input")#xxxxは中間ディレクトリ 6 image = p.glob('*') 7 8 for im_n in range(len(image)): 9 print((im_n)+1 , image[im_n])
imageをリスト型に変更してから、コードを実行するとエラーは解消されました
python
1def test03(): 2 from PIL import Image, ImageDraw , ImageFont 3 import pathlib 4 5 p = pathlib.Path("/Users/xxxx/bulk/input")#xxxxは中間ディレクトリ 6 image = p.glob('*') 7 image = list(image) 8 9 for im_n in range(len(image)): 10 print((im_n)+1 , image[im_n])
ここから、コードを短くするためにfor文を次のように書くと”TypeError: 'generator' object is not subscriptable”エラーが発生します。
Python
1def test03(): 2 from PIL import Image, ImageDraw , ImageFont 3 import pathlib 4 5 p = pathlib.Path("/Users/xxxx/bulk/input")#xxxxは中間ディレクトリ 6 image = p.glob('*') 7 8 for im_n in range(len(list(image))): 9 print((im_n)+1 , image[im_n]) 10
imageはgeneratorではなくlist型になっているはずなのに、なぜこのようなエラーが発生するのでしょうか
for 文 関数を同時に呼び出すときに外側から実行しているのでしょうか??
試したこと
最初に、rangeとlenとlistを同時使いしていることに問題があるかと思い次のようなコードを書きました。
Python
1def test04(): 2 i = 1,2,3,4,5 3 4 print(i) 5 print(type(i)) 6 print(range(len(list(i)))) 7>(1,2,3,4,5) 8><class 'tuple'> 9>range(0, 5)
問題なく実装できなので、順番に問題があると推測し、今回はこのような質問をさせもらいました。お手数ですが宜しくお願いいたいします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/25 07:01