老害の入り口

取引先で35年間軽作業に従事していたオバちゃんが退職することになった。 その作業を新人君が引き継いだのだけど、その新人君、先月だけで3回も大きなミスをして、「ミスがあっても大きな事故に至らないシステム作りを」みたいなことをその新人君が声高々に主張して(お前が言うなという感じだが)、

https://x.com/yaneuraoh/status/1785813820616925406

内容が不明ゆえに以下は推測にならざるを得ないが、 軽作業に分類される作業で月に三回も「大きなミス」とされる事象が出る原因として思いつくのは

・前任者の作業実態が作業標準と大きく乖離していた(作業標準通りに作業すると失敗する)

・作業における例外処理の種類が多い or 頻出・そも作業標準自体が存在していない

・以上の問題を自部署・隣接部署を含めて誰も把握できていない

…等である 当該作業におけるミステイクが組織として「大きいミス」と位置づけられるのであれば 上記問題はいずれも組織としては放置しているわけには行かないでしょう

法人組織として持続的に事業を行うのであれば この機会にシステムなり業務そのものなりを改修整備しましょうというのは よい判断であるとおもふよ

担当交代後のミス頻出要因は他にも

・軽作業と称しているが実は高度な技能を要する作業だった

・ミス自体は発生していたが表に上がらなかった(上がらないように本人or隣接部署が黙ってカバーしていた)

などの可能性もあるが 挙げたらきりがないのでこのくらいにしておく

https://x.com/tacmasi/status/1786193125511430449

特定人物のスキル知識に頼った難しい作業だったのではないか? 「ミスがあっても大きな事故に至らないシステム」が運用でカバーという方法で実装されていたのではないか?という推測

これは正論だし、改善の必要性も元ポストの人も認識しているようだが、正論を突きつけられた年長者が「お前が言うなという感じ」と思うようになったら老害になりかけている前兆だと思う。人は油断するとすぐに何を言ったかではなく誰が言ったかを重視しがちになる。気をつけたい

Pythonの例外ハンドラはローカル変数のスコープを破壊する

dev.thanaism.com

pythonはやばい。理解に苦しむ挙動が多くてつらい。たとえば以下のコード

def inverse(a):
    if a == 0:
        raise ValueError('0で割ることはできません')
    return 1 / a

def main():
    e = 0
    try:
        e = inverse(2)
    except ValueError as e:
        print(e.args[0])

    print(e)

main()

これは何と出力されるでしょうか?

0.5

となります。これは問題ありません

ではmainをこうするとどうでしょう

def main():
    e = 0
    try:
        e = inverse(0)
    except ValueError as e:
        print(e.args[0])

    print(e)

inverse(0)が例外を投げるので、以下のように出力されると予想するのではないでしょうか

0で割ることはできません
0

違います、実際はこうなります

0で割ることはできません
Traceback (most recent call last):
  File "/Users/hisanori/hoge.py", line 17, in <module>
    main()
  File "/Users/hisanori/hoge.py", line 15, in main
    print(e)
          ^
UnboundLocalError: cannot access local variable 'e' where it is not associated with a value

未定義のローカル変数エラーが発生しました。関数内で定義したローカル変数と同じ名前の変数を例外ハンドラに使用し、実際に例外がスローされた場合、元のローカル変数の定義がなかった事にされてしまっています。例外発生時だけこんなエラーを出すなら例外が発生していない時も同じエラーにしてほしい・・・

JavaやJSなどでは例外ハンドラで新しいスコープが作られるので元のeと例外ハンドラのeは別の変数となり予想通りエラーメッセージと0が出力されます。Rubyの場合は例外ハンドラが新しいスコープを作らないらしくエラーメッセージが2回でます。

という感じに他の言語で培った常識が通じなかったりして、pythonにはあまり深入りしたくないという気持ちが強い