2016-06-29 4 views
2

これは常に発生します。関数は、私が読むことができないオブジェクトを返します。ここで:Python TypeError: 'TagList'オブジェクトは反復不可能です

discoverer = GstPbutils.Discoverer() 
    discoverer.connect('discovered', on_discovered) 
    info = discoverer.discover_uri(self.loaded_file) 
    print(vinfo.get_tags()) 

戻り値この:

<Gst.TagList object at 0x7f00a360c0a8 (GstTagList at 0x7f00880024a0)> 

しかし、私はこれをやろう:私はthe doc of this data structureを読んだとき

TypeError: 'TagList' object is not iterable 

しかし:

tags = vinfo.get_tags() 
    for tag in tags: 
     print (tag) 

私はこれを取得、私は理解しているようだ...リスト?誰かが、タグを取得する方法を教えてくれる以上、私はそれらの文書を読む方法を教えてくれますか?また、私はいくつかのイントロスペクションの方法とツールを欠いています。私は、私が遭遇するオブジェクトが何であるか、そしてそれらがどのように機能するかを発見するために使用できますか?

答えて

1

これはGStreamerを持つすべての私は使ったことがないよう、仮定のpythonです:ドキュメントによると

- Pythonバインディングだけであることを覚えておいてください...はい、それはあるが、そのリストは述べて..しかし、これは内部構造として表すことができます。..バインディング - それはCと同様に(より良い方法で実装されていない場合)同様に動作します。C with tags to iterate themで何をしますか?私はそれをどのように見つけたのですか? 。

あなたが賢明であり、使用しているオブジェクトがどのように実装されているかを考えなければなりません - それが表すものを知っているという事実と共に、私は、 1つは文字列、もう1つはintなどです。簡単に繰り返すことはできません。

私は確かしかし、C言語ではないです。それを文字列と仕事にシリアライズ、あなたがタグでやりたいん内容に従って..

1 -

だから私は、次の2つのオプションを持っていると思いますto_stringは、Pythonでto_stringと同じことをする可能性があります。タグ名だけに興味がある場合や、返されるものがあれば試してみてください。

tags = vinfo.get_tags() 
tags.foreach(my_callback, self) 

そして、あなたのコールバックで:

2は、そのコールバックの定義と組み込みforeachを使用

def my_callback(list, tag, user_data): 
    print(tag) 
    #do whatever you want with list 
    #not sure how to use casting in python: 
    YourClass ptr = user_data 
    ptr.your_method(whatever, tag); 
関連する問題