最近、pythonを始めました。
今、複数の条件をすべてクリアした場合True
を返し、それ以外はFalse
を返す下記の関数を作成しています。
※クラス内に作成しています
作成した関数
Python
1import re 2form dadtetime import datetime 3class Check: 4 def __init__(self, item_id, amount, shipping_address, tel_number, 5 fullname, shipping_date_str, order_file): 6 self.item_id = item_id 7 self.amount = amount 8 self.shipping_address = shipping_address 9 self.tel_number = tel_number 10 self.fullname = fullname 11 self.shipping_date_str = shipping_date_str 12 self.order_file = order_file 13 14 self.amount_int = None 15 self.shipping_date = None 16 17 def validate(self, items): 18 while True: 19 items.has_id(self.item_id) 20 self.amount_int = int(self.amount) 21 if type(self.amount_int) == "int" and self.amout >= 1: 22 pass 23 else: 24 break 25 if len(self.shipping_address) > 0: 26 pass 27 else: 28 break 29 m = re.match(r"{\d}{2,4}-{\d}{4}-{\d}{4}", self.tel_number) 30 if m: 31 pass 32 else: 33 break 34 if len(self.fullname) > 0: 35 pass 36 else: 37 break 38 self.shipping_date = datetime.strptime(self.shipping_date_str, "%Y-%m-%d") 39 if self.shipping_date_str: 40 pass 41 else: 42 break 43 resulting = 1 44 break 45 if resulting == 1: 46 return True 47 else: 48 return False
実行結果
このプログラムを実行するとUnboundLocalError: local variable 'resulting' referenced before assignment
と出てしまいます。
実施した対策
一応、こちらに来る前にネットでこのエラーについて調べてみましたが、スコープ外の変数を使っている時に、print
等でその変数を使用してから同じ名前で代入するとそのエラーが怒ると分かりました。
しかし、私は、このresulting
変数をこの関数内で初めて使い、尚且つ、すぐさま代入をしているので違うと思っています。
念のため、適当に思いついた名前を代入しても結果は変わりませんでした。
どうしてこのエラーが起きているか分かりません。
ご教授の程よろしくお願いします。
クラスと関数の先頭の宣言くらいは端折らないで書いていただけると構造がわかりやすいです。というかwhileの中でクラス定義してるんですか?

回答3件
あなたの回答
tips
プレビュー