6
3

Python初心者が実装で気づいたこと

Last updated at Posted at 2023-12-26

最近社内のpythonツールの修正を改善したく、実装してみました。
すると、はまったとか気づいたことがありますので、忘れないようそして他の方の参考になれるようにこの記事に書くようにします。

勉強になった点

int型でファイルへの書き込みはできない

pythonは変数定義の際に型の指定は必要ないが、method呼び出す際に型がチェックされることがあると今回のことでわかりました。
書き込みは以下のコードで実現しています。

    filePath = {ファイルのパス}
    pageNoFile = open(filePath, 'w')
    pageNoFile.write(pageCount)
    pageNoFile.close()

pageNoみたいな数字をファイルに書き込むと以下のエラーになります。

TypeError: write() argument must be str, not int

pageCountが数字とかのint型である場合、以下のようにstring型に変換できます。

str(pageCount)

文字列と数値は結合できない

例えば以下のコードです。

toGetComponentURL = url + pageCount

urlは文字列で、pageCountは数字です。この二つを結合する場合、以下のエラーが発生します。

TypeError: can only concatenate str (not "int") to str

同様にstring型に変換する必要があります。

print()みたいに型変換不要なケースもありますが、型変換が必要なケースが多いというのを知りました。

jsonにある要素が空であるかチェック

今回のケースはjsonにあるcomponentsのmapがあるかをチェックしたいです。
以下のように書けばよいのです。([]を使う)

jsonObj["components"] == []

再帰的な処理を書く際にreturn書くのを忘れないで

今回の処理は結果が出なくなるまでAPIを呼び出し続けて、最大ペース数を取得する処理を書こうとしました。
以下のようにもともと書きました。

def get_max_page_no(pageCount) :
    toGetComponentURL = url + paramPageSize + str(pageSize) + paramPerPage + str(pageCount)
    req = urllib.request.Request(toGetComponentURL)
    with urllib.request.urlopen(req) as res:
        jsonObj = json.loads(res.read().decode('utf8'))
        if (jsonObj["components"] == []) :
            pageCount = pageCount - 1
            return pageCount
        else :
            pageCount = pageCount + 1
            get_max_page_no(pageCount)

すると、後続の処理でエラーが起きて、調べてみたらpageCountがうまく生成されず、Noneになりました。
もうタイトルでネタバレしたのですが、elseのところにreturnしなければいけないのです。

        else :
            pageCount = pageCount + 1
            return get_max_page_no(pageCount)

その他

VscodeでPythonの開発がしやすい

元々はpythonを自端末でインストールし、セットアップをやって、batファイルから実行する、もしくはJenkinsジョブからpythonコードを実行するというのをやりました。
今回は初めてvscodeで直接コードを実行しました。

セットアップはかなり簡単で、Vscodeにpythonの拡張機能を追加すれば、pythonコードを実行できます。
デバッグもできて、かなり使いやすかったのでお勧めです!
image.png

最後に

数時間で書いたコードですが、いろんなエラーに遭遇して勉強になりました。
皆さんの参考にもなれれば幸いです。

6
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3