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

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

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

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

Q&A

2回答

976閲覧

unsupported operand type(s) for +: 'int' and 'NoneType'について

kabutogani

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/06/24 16:17

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)Python(Otree)で経済学実験を組んでおります。
playerの内
1.L_playersの合計units ☛sum([p.L_units for p in players])
2.F_playersの合計units ☛sum([p.F_units for p in players])を足し合わせて、total_unitsを作る機能の実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

TypeError at /p/0w0p809o/cournot1/ResultsWaitPage/7/ unsupported operand type(s) for +: 'int' and 'NoneType' 該当箇所は、\Desktop\program\oTree\cournot1\models.py in set_payoffs, line 56 ### 該当のソースコード

class Group(BaseGroup):

F_unit_price = models.CurrencyField() L_unit_price = models.CurrencyField() total_units = models.IntegerField(doc="""Total units produced by all players""") Take = models.BooleanField( label="選択", choices=[ (1, '先手'), (0, '後手')] ) def set_payoffs(self): players = self.get_players() self.total_units = sum([p.L_units for p in players]) + sum([p.F_units for p in players]) self.L_unit_price = Constants.total_capacity - sum([p.L_units for p in players]) self.F_unit_price = Constants.total_capacity - self.total_units for p in players: if self.Take == 1: self.L_payoff = (self.L_unit_price - 3) * [p.L_units for p in players] if self.Take == 0: self.F_payoff = (self.F_unit_price - 2) * [p.F_units for p in players]

class Player(BasePlayer):

Take = models.BooleanField( label="選択", choices=[ (1, '先手'), (0, '後手')] ) cost = models.IntegerField() def cost_player(self): if self.Take == 1: self.cost = 3 if self.Take == 0: self.cost = 2 L_payoff = models.IntegerField() F_payoff = models.IntegerField() L_units = models.IntegerField( min=0, max=10, doc="""Quantity of units to produce""", label="あなたは0から10までのうちどのくらいの生産量を選択しますか?" ) F_units = models.IntegerField( min=0, max=5, doc="""Quantity of units to produce""", label="あなたは0から5までのうちどのくらいの生産量を選択しますか?" )
### 試したこと playerをL、Fとするのではなく、一気にまとめたりしましたが成功しませんでした。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

jbpb0

2021/06/24 21:55

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
guest

回答2

0

各プレイヤーのL_unitsかF_unitsあるいはその両方がNoneのものがあるのでしょう。

その原因は、models.IntegerFieldの戻り値ですね。何かをimportしているのか自作しているのかがわからないので、これ以上はわかりません。

投稿2021/06/24 23:12

ppaul

総合スコア24670

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

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

0

int と NoneType の間では、+の演算子は使えない、
というエラーです
そこんところにでている変数の値を片っ端から調べてみよう。
Noneのものがないでしょうか

#コードは読んでません

投稿2021/06/24 22:14

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問