質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

13828閲覧

Pythonで文字列の加算の際にNoneがある場合の対処方法

Joes

総合スコア18

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/24 04:33

前提・実現したいこと

Pythonで文字列の加算の際にNoneがある場合のエラーの回避したい。スクレイピング等で複数の文字変数に
取得したデータを入れて、その後データベース等に保存しているのですがNoneがある場合の
対処方法が分かりませんでした。
対処方法をご教授いただければ幸いです

python3

1"a" + None + "c"

エラーメッセージ

TypeError Traceback (most recent call last)
<ipython-input-28-4b16e9983d43> in <module>
----> 1 "a" + None + "c"

TypeError: must be str, not NoneType

試したこと

listにappendしてjoinを使ってみましたがエラーになりました。

python3

1test_list.append("a") 2test_list.append(None) 3test_list.append("c")
test_list

['a', None, 'c']

"".join(test_list)

エラーメッセージ

TypeError Traceback (most recent call last)
<ipython-input-26-4764349d246b> in <module>
----> 1 "".join(test_list)

TypeError: sequence item 1: expected str instance, NoneType found

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/04/24 04:35

Noneというのはそもそもスクレイピングでの要素の取得に失敗していませんか?
shiracamus

2020/04/24 04:36

Noneがある場合はどうなって欲しいのですか? 'None' という文字列を入れたいのか、無視したいのか。
Joes

2020/04/24 04:45

meg_さん 例えばニュース記事のスクレイピングで、記事が有料会員しか見れない場合は何も取得出来ないです。 取得できない場合にNoneを返すようにしています。
Joes

2020/04/24 04:48

shiracamusさん データベース等に入れる場合、どのようにすれば良いのか不勉強のため分かっていません。 とりあえずデータがない場合はNoneを返すようにしています。 この例の場合、aとcには欲しい値が入っているのでそのまま採用したいと考えています。
shiracamus

2020/04/24 04:54

"".join(map(str, test_list)) とすれば ”aNonec" になります。
Joes

2020/04/24 05:12

shiracamusさん strにすればエラーは出なくなりますが、Noneという文字列にしてしまっても問題ないのでしょうか
shiracamus

2020/04/24 05:27 編集

どう処理するかは JoeNさんが決めることなのでは? 文字列結合したいと決めたのもJoeNさん、どのように結合するかを決めるのもJoeNさん。
meg_

2020/04/24 06:05

>例えばニュース記事のスクレイピングで、記事が有料会員しか見れない場合は何も取得出来ないです。 取得できない場合にNoneを返すようにしています。 その場合は空文字を返す、とかじゃ駄目なのでしょうか?
Joes

2020/04/24 06:27

megさん 回答ありがとうございます。空文字も試していたのですが、何がベストプラクティスかよく分からなかったため質問させていただきました。とりあえず空文字にしたいと思います。
guest

回答2

0

ベストアンサー

次のコードを研究してみてください。
pp.py

python3

1from functools import reduce 2 3s = "a" + (None or '') + "c" 4print(s) 5 6test_list = [None, "a", None, "b", None, "c"] 7 8test_str = reduce(lambda x, y: (x or '') + (y or ''), test_list) 9print(test_str)

実行例:
イメージ説明

参考情報

  • 文字列がNoneの場合はブランクにする

https://www.python.ambitious-engineer.com/archives/1781

投稿2020/04/24 12:40

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Joes

2020/04/25 03:19

ありがとうございます!
guest

0

Noneを削除したリストを作ってはどうでしょうか。ついでに空文字列も削除。

Python

1new_test_list = [x for x in test_list if x]

投稿2020/04/24 10:54

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Joes

2020/04/25 03:19

ありがとうございます。データベース等に個別に入れる場合は使えないですが参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問