問題が発生する理由my_dict['backlog_month_done']
はNone
です。
これは、if で追加の条件を使用して修正できます。
my_dict = {'category': 'failure', 'logged_product': 'log_prd1', 'product': 'prd1', 'backlog_month_done': None,'TDC': <__main__.TDC object at 0x010F47D0>}
for attr, value in my_dict.items() :
if value and value.startswith('<__main'):
#removeit
TDC
ただし、 in の値は文字列ではないため、これが期待どおりに機能するとmy_dict
は思えません。これは、コピーして貼り付けたクラスのインスタンスであるrepr
ため、次のようなメッセージが表示される可能性があります。
AttributeError: 'TDC' object has no attribute 'startswith'
チェックすることでそれを防ぐことができvalue
ますstr
:
for attr, value in my_dict.items() :
if isinstance(value, str) and value.startswith('<__main'):
#removeit
ただし、それはあなたが望んでいるものではないと思います。値が TDC のインスタンスであるかどうかを確認する場合はTDC
、引数としてに渡す必要がありisinstance
ます。
for attr, value in my_dict.items() :
if isinstance(value, TDC):
#removeit
または、"<__main" で始まるもの (repr を含む) を削除したい場合は、アイテムの文字列を取得する必要があります。この場合、カスタム値を返すために頻繁にオーバーロードされるため、repr
関数を使用することをお勧めします。str
for attr, value in my_dict.items() :
if repr(value).startswith('<__main'):
#removeit