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

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

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

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

Q&A

解決済

2回答

378閲覧

関数を再帰的に呼び出したい

emiime

総合スコア27

Python

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

0グッド

0クリップ

投稿2019/02/28 10:49

pythonでfind_the(u)という関数を作りました。
以下のように、c.attrib["id"] == id_m となった時に関数を再帰的に呼び出したいのですが、

child_id += ""+find_the(c)

TypeError: must be str, not NoneType

というエラーが出てしまいます。

python

1child_id = "" 2for m in range(len(list00)): 3 id_m = list00[m] 4 for c in es1: 5 if c.attrib["id"] == id_m: 6 child_id += ""+find_the(c) 7 return child_id 8

c.attrib["id"] == id_m となった時に関数を再帰的に呼び出すには、
どのようにすれば良いか教えてください。
今回の問題点もわかりません。
すみません。
よろしくお願い致します。

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

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

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

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

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

dice142

2019/02/28 10:51

find_the関数の提示もお願いします。
Lhankor_Mhy

2019/02/28 11:07

es1 には何が入っているのですか?
emiime

2019/02/28 11:13

xmlファイルなのですが、 社外に出すとよく無いかな、と思い、 中途半端な質問の仕方になってしまいました。 すみません。
Lhankor_Mhy

2019/02/28 11:15

ということは、テキストストリームですか?
emiime

2019/02/28 11:17

そうです!
Lhankor_Mhy

2019/02/28 11:21

テキストストリームを扱うクラスで、attribという属性があるものを存じ上げないので、利用されているモジュールをご提示ください。
emiime

2019/02/28 11:25

import xml.etree.ElementTree as ET これです。 すみません。
Lhankor_Mhy

2019/02/28 11:28

テキストではなくて、Element が入っているということですね? find_the 関数はここで終わりですか?
emiime

2019/02/28 11:57

そういうことです。 関数はここで終わりです。
Lhankor_Mhy

2019/02/28 12:03

となると、return 文が実行されない場合があるはず。 y_waiwai さんのご回答のとおりでは?
Lhankor_Mhy

2019/02/28 12:04

あ、もしかして、エラー文の意味がお分かりではないのかな? たとえば、 "" + None を実行すると、同じエラーが出ますよ。
emiime

2019/02/28 12:15

エラー文の意味がよく分からず、教えていただきたいです。
emiime

2019/02/28 12:16

なぜ、 ""+None でエラーが出るのかが、分からないです。
Lhankor_Mhy

2019/02/28 12:16

文字列に、None を足すことはできないよ、ということです。
Lhankor_Mhy

2019/02/28 12:18

文字列にNoneをなぜ足してはいけないか、については、なかなか興味深い疑問だと思いますが、話が長くなるので、それは別質問でも立てていただいて、ここはまるっと「そういうものだ」と理解してください。
emiime

2019/02/28 12:22

なるほど。 わかりました。 細かく教えていただき、本当にありがとうございました!
Lhankor_Mhy

2019/02/28 12:25

ご解決されて何よりです。
dice142

2019/03/01 06:08

解決されたのであれば解決済みにしていただけると。
guest

回答2

0

ベストアンサー

google翻訳
TypeError:NoneTypeではなくstrでなければなりません

エラーメッセージを読みましょうよ。
find_the(c)がなにを返してるのか見てみれば

投稿2019/02/28 10:53

y_waiwai

総合スコア87774

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

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

0

y_waiwai さんの回答

投稿2019/07/24 18:07

編集2019/07/25 16:13
emiime

総合スコア27

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

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

退会済みユーザー

退会済みユーザー

2019/07/24 22:11

違いますよ。 y_waiwai さんが回答してますが、 「NoneTypeではなくstrでなければなりません」 が正しいです。
LouiS0616

2019/07/25 22:29

結局 ""+None でエラーを吐いているので、間違っていないように思います。
退会済みユーザー

退会済みユーザー

2019/07/25 22:58 編集

私が確認したときにはこの回答がベストアンサーになっていました。 y_waiwai さんの回答を無視した質問者自身による BA 回答だったので、間違っていると指摘しました。 質問者が投稿した BA 回答としてみなければ、間違いってほどではないというのは同意します。 修正後の回答が、「y_waiwai さんの回答」なのであれば、y_waiwai さんの回答を BA にすれば良いと思うんですけどねぇ。。。意味がわからん^^;
LouiS0616

2019/07/25 23:07

なるほど、そのような事情が有ったのですね。 半年近く放置して自己解決っていうのは確かにもやもやします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問