0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonはバックスラッシュの後ろにスペースが入っているとエラーになる

Posted at

きっと常識的な知識なのだろうけど、やらかしてしまったから自戒の意味でもこの記事を認める。

#結論から

  • バックスペースの後ろに空白をおいてはダメだぞ
  • そもそもバックスペースで複数行に分ける記述は推薦されていないぞ

#ことの背景
他人が管理していたgitプロジェクトの、他人が書いたコードの修正をおこなった。
修正はSQL文のWhereを追加するという簡単なモノ。

以下のようにコードを修正した。

修正前
    ...
    sql = "SELECT "\
          "  user.id ,"\
          "  user.name "\
          "FROM "\
          "  user "\
          "WHERE "\
          "  user.age >= 20 "\
          "  AND user.sex == 'M' "
    c.execute(sql)
    ...
修正後

    ...
    sql = "SELECT "\
          "  user.id ,"\
          "  user.name "\
          "FROM "\
          "  user "\
          "WHERE "\
          "  user.age >= 20 "\
          "  user.age <= 60 "\␣␣␣␣␣␣␣␣
          "  AND user.sex == 'M' "
    c.execute(sql)
    ...

gitにコードを上げて、数週間後。
レビューも検証も通って本番への適用も終わって忘れている頃。
お客様からなんかSQLを引いているところが動いていないようだ言われた。
調査したら、こんなエラーが。

SyntaxError: EOL while scanning string literal

まじかよ。

#何でこんなことが起こったのか
実はこのコード、本番環境用とテスト環境用で管理が分かれているファイルだった。←この構造自体よくない
とはいえ、私の管理しているコードじゃないので、言われた通りにテスト環境用のコードを修正。
開発者テストが通った後に、修正したコードを本番用ソースにコピペして提出。
その時に末尾に空白が混じってしまったようだ。

修正部分は総合検証が実施され、合格。このとき使用されていたのもテスト用コード。
本番用のコードにしか空白が入っていないので未検出のままリリース。
そしてお客様が使ったときに発生してしまった。

#対策
組織的な開発フローで言いたいことはいくつもあるんだが、

とりあえず個人的にできる対策として以下を実施
*コピペ作業するときは空白をエディタに表示させるようにして作業するようにしました。
*作業後に空白無視せず比較を行ってチェックするようにしました。

なんともやるせない…

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?