きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Not enough segments というエラーメッセージが発生した

二度目がないようにメモ。

どこにも実装していないNot enough segmentsというエラーが発生したので、どこで発生したかを確認するためのメモ。

環境

  • Python
    • 3.12
  • PyJWT
    • 2.8.0

原因

JWTとして無効な形式の文字列をdecodeしていたため。

本来であれば、次の形式の文字列になるはずだったが異なるJWTをdecodeしていた。 <base64_encoded_header>.<base64_encoded_payload>.<signature>

エラーメッセージ自体はライブラリが発生させている。全てのライブラリを調べてないが、PythonのJWTライブラリの場合はこのエラーメッセージになっていそう。少なくとも、PyJWTpython-joseflask_jwt_extendedはこのメッセージの模様。

対応

正しいエラーメッセージだったので対応しない。ただし、JWT形式を無視したトークンで送信していたシステムに対して是正依頼。

ソースコード

終わりに

対策も何もしていないのでJWTの形式の共有、事例紹介というのをメインに共有します。

参考情報

自組織のGitHubで似たusernameを区別しやすくする

始めに

小ネタ。GitHubのアカウントでusernameがかなり似た名前になることがあります。通知に含まれるusername自体は変更できないものの、Pull Requestの横にprofile nameを追加で表示することで判別しやすくする方法を見つけたので変更しました。

ちなみに私だと次の設定です。

  • username
    • hirotoKirimaru
  • profile name
    • 水上 皓登

環境

  • GitHub
    • 2025/07/05時点
    • privateリポジトリ
    • GitHub Team以上であること

ヘルプ

ヘルプを読んでください。

https://docs.github.com/ja/organizations/managing-organization-settings/managing-the-display-of-member-names-in-your-organization

ソースコード

なし

終わりに

基本的にはusernameが似ることは少ないのですが、本名を使用しているとどうしても似てしまう可能性がありますね。

最終的には末尾の番号で見分けられるようになったとはいえ、慣れるまでは表示されていると便利です。

np.nanをNoneに変換しないとDBアクセス時にエラーになることがある

始めに

※ 自宅で再現しなかったので、そういう事象が発生したということをメモするだけの記事。

FastAPIでアップロードされたCSVをもとに登録する処理を作っていました。そして、特定の条件でエラーになることに気づきました。しかし、エラーが発生行を確認しているとINSERT や UPDATEではなく、SELECTしたタイミングでエラーになっていることがわかりました。

今回の記事では、回避した方法を残します。

環境

  • Python
  • SQLAlchemy
  • MySQL

※ 再現しなかったのでバージョン不明

実装

特定の条件で発生していたエラーはnp.nanのパラメータを検索で使用していた時に発生していました。

query = select(User).where(User.id.in_([np.nan]))
# この検索時に発生
actual = (await db.execute(query)).scalars().all()

そのため、最も簡単な方法としてはnp.nanNoneに変換することで簡単に回避できます。都度、np.nanのチェックを入れる方法もあるのですが、メモリに余裕がある場合はこちらで一気に置換してしまったほうがコードの可読性も上がるし楽だと思います。

import pandas as pd
import numpy as np

# Sample DataFrameを作成します.
df = pd.DataFrame({'Column1': [1, 2, np.nan],
                   'Column2': [3, np.nan, 6],
                   'Column3': [7, 8, 9]})

df.replace({np.nan: None}, inplace=True)

ソースコード

なし

終わりに

発生後でブログにしようと考えていたのですが、その後にライブラリアップデートやPython本体のバージョン等のアップデートをかけてしまったせいで発生条件を見失ってしまいました。

更新時に変換できないパターンならともかく、検索時に変換できずにエラーになってしまうパターンを面白いと思ったタイミングですぐにブログにしてしまうべきでしたね。内容自体は薄いですが、そういうこともあるという周知ができればいいかなと思ってます。