【Python】NameError: name 'xrange' is not definedと言われる
概要
以下のエラーが出たのでメモ。
NameError: name 'xrange' is not defined
解決策
xrange()
はpython3ではrange()
にremameされているため、range()
にすればOK。
参考
【Python】AttributeError: 'dict' object has no attribute 'has_key'
概要
以下のエラーメッセージが表示されたので対処。
AttributeError: 'dict' object has no attribute 'has_key'
解決策
has_key
はpython3で使えないらしいので、inを使ってキーの存在確認を行う。
if 'Item' in raw_data: # code else: # code
参考
https://stackoverflow.com/questions/33727149/dict-object-has-no-attribute-has-key
【Python】Python3でnew.instancemethodが使えないテーブル作成時にエラー
概要
boto3を利用してテーブルを作成する際に以下のエラーが発生したためメモ。
An error occurred (ValidationException) when calling the CreateTable operation: Hash Key not specified in Attribute Definitions. Type unknown.
解決方法
テーブル作成時に与えるKeySchema
とAttributeDefinitions
の値が一致していない場合に発生。
同じ値を指定すればOK。
【Docker】OCI runtime exec failedと言われた
【概要】 Dockerコンテナに入る際に以下のことを言われたのでメモ。
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown
【解決方法】
docker exec -it [コンテナ名] /bin/bash
の
/bin/bash
をbin/sh
にする。
【Docker】docker-composeでExited (0)とかでるとき
概要
docker-composeでExited (0)が出て全然コンテナが立ち上がらないので困り果てたのでメモ。
本文
dockerコンテナの立ち上げ結果をみた際にExited (0)が出るので対策を調べてみたら、dockerのimageから起動してみる記事にありついた。 以下のコマンドでimageからdockerコンテナを起動することができる。
docker run -d -t -i [イメージ名] /bin/bash
これを実行してみると、imageからの起動は問題なかった。 ということはdocker-compose側での問題なんだろうな、という問題の切り分けができた。 なので「docker-compose Exited (0)」で調べたらstackoverflowがヒットした。
docker-compose.yml中のコンテナの設定にtty: true
を記載すれば良いとのことだったので追記したところうまく動いた。ちなみに、ttyは上記のdockerコマンドの-t
と同一の指定とのこと。
【Python】The session is unavailable because no secret key was set.
概要
以下のエラーが発生したため対処。
The session is unavailable because no secret key was set.
本題
Flaskでsession変数を扱う際は、以下のようにする。
from flask import session // 略 session['user_id'] = "hogehoge"
しかしながら、secret key
を設定していないとエラーが発生する。
そのためsession
変数を扱うより前の場所でsecret key
を設定する。
if __name__ == "__main__": app.secret_key = 'secret key'
これで解決
参考
【Go】逆ポーランドを出力
概要
いまさらですが逆ポーランドを出力するものを書く。 元ネタは改訂第4版 C言語によるはじめてのアルゴリズム入門。
本題
逆ポーランドを出力するためには、数値と演算子の優先度を比較しながらstackに値を一時格納する。 逆ポーランドの出力が確定した部分からpolishへ格納していく。
豆知識として、Goは*p++
のようなポインタの演算ができないことを知った。また、polish[sp2++]
のようにindexでインクリメントを利用することは、インクリメントがコンパイラに式ではなく文として解釈されるためできないことも知った。
以下ソースコード。
package main import ( "fmt" ) var stack [10]string var polish [10]string func main() { formula := "a+b-c*d/e" sp1, sp2 := 0, 0 // 優先順位テーブル pri := map[string]int{ "a": 3, "b": 3, "c": 3, "d": 3, "e": 3, "+": 1, "-": 1, "*": 2, "/": 2, "": -1, } for _, v := range formula { for pri[string([]rune{v})] <= pri[stack[sp1]]{ popAndPush(&sp1, &sp2) } sp1++ stack[sp1] = string([]rune{v}) } // stackにたまっているものをpolishへ for sp1 > 0{ popAndPush(&sp1, &sp2) } fmt.Println(polish) } func popAndPush(sp1 *int, sp2 *int){ *sp2++ polish[*sp2] = stack[*sp1] *sp1-- }
出力結果
[ a b + c d * e / -]
参考
mapの作り方(今回使っていないけど)
mapについて(今回使っていないけど)