水曜日, 9月 19, 2018

Python: try ブロックでコードが終わるとき

ゆえあってPythonでシステムを書いている今日この頃なんですが、面白い発見をしたのでここで書いておきます。

まあ、もとはといえばtry-except-finallyなど書いていて、データベース接続をどこで閉じるかっていう議論があったわけです。finallyブロックでどうか、なんていうことで議論は収束しました。

しかしながらここで「え」「これfinallyこないんじゃない」「無理だよ」「unreachable」っていう指摘が出てきたわけなんです。tryブロックで値を返していたわけなんですね。finallyへは来ないんじゃ…

しばらくして「あれ?」って声が上がりました。これです。

この結果は…(走らせてみてください)。

tryブロックで終了するコードだと起きる現象ですね。

実はこれ、Javaでも同様です(走らせてみてください)。

def foo():
try:
return 'try'
except:
return 'except'
finally:
return 'finally'
print(foo())
view raw finally.py hosted with ❤ by GitHub
def foo():
for i in range(5):
try:
break;
except:
return 'except'
finally:
print( 'finally')
print(foo())
view raw try.py hosted with ❤ by GitHub
class TryTest{
static String foo(){
try{
return "try";
}catch(Exception e){
System.out.println("except");
}finally{
return "finally";
}
}
public static void main(String args[]){
System.out.println(TryTest.foo());
}
}
view raw TryTest.java hosted with ❤ by GitHub

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...