これは、「必要な」ことを実行するように見えますが、ショートカットが悪いと感じています。つまり、これらすべての pub-sub ライブラリには理由がありますよね?
def fakeMessagePasser(myFunction, listOfListeners):
for obj in listOfListeners:
try:
success = getattr(obj, myFunction)()
except AttributeError:
handleTheSituationCorrectly()
Python が許可よりも許しを求めることを好むことは知っていますが、もしそうなら、そもそも「複雑な」サブスクリプション ベースのオブジェクト メッセージング ライブラリに煩わされるのはなぜでしょうか? 言語はこれを本質的に処理するように設定されているようです-しかし、よくあることですが、私の知識に大きな穴があり、そうでなければこれが悪いことである理由を教えてくれるかもしれません.
これは良いですか、別の言い方をすれば、意図された- try/except の適用ですか? たとえば、ゲーム ループで次のようなものが表示されたとします。
#incoming pseudocode, not based on anything in particular
for enemy in objectQueue:
if enemy.hasGoodGuyInSights():
try:
enemy.attack()
except AttributeError: ##maybe this object has no attack method, it just 'follows' or something, who knows why bad guys do anything really
handleTheSituationCorrectly()
これは家族の死などに直接寄与するものではありませんが、try/except をうまく利用しているのでしょうか。
私は通常、型チェックの代わりに try/except を見ているように感じるので、質問します。オブジェクトを特定の型であるかのように扱い、それが失敗した場合は正しく処理したいのです。したがって、try/except を使用してリストまたは dict を反復処理することと、それを使用してメソッドを呼び出してから、その「not-a-message」を正しく失敗/無視することには違いがあるようです。右?