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

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

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

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

解決済

エラー an integer is required (got type str)

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

3回答

0リアクション

0クリップ

6637閲覧

投稿2020/01/14 11:27

編集2021/11/15 02:12

こんにちは
LINEPYでBOTを作ろうとしているものです

本題に入りますが、
OEPollを使用して送られたメッセージを
"line.log"というファイルに保存するというスクリプトなのですが、

Error

an integer is required (got type str)

が出てしまい、
"line.log"に内容を保存できませんでした

デバッグしてもどこが原因でファイルが保存できていないのかわからないです

Pythonの詳しい方、

解決法をお願いします

以下がソースコードです

python

# -*- coding: utf-8 -*- from linepy import * import time, re, ast, sys, os, datetime try: args = sys.argv if len(args)>=2 and args[1] is not None: cl = LINE(args[1]) else: print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-") print("||| Read Bot by **** |||") print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=") print("") print("___Login Mode List______") print("| 1, URL Auth (Default)|") print("| 2, authToken |") print("| 3, Email and Password|") print("________________________") print("") startCmdInt = input ("Please Choose Login Mode [1]: ") print("") if startCmdInt == "" or startCmdInt == "1": cl = LINE() elif startCmdInt == "2": authToken = input("authToken: ") print("") cl = LINE(authToken) elif startCmdInt == "3": email = input("Email: ") password = input("Password: ") print("") cl = LINE(email, password) else: cl = LINE() except Exception as e: print("") print(e) print("") input("Press Enter to Finish...") exit() channelToken = cl.getChannelResult() cl.log("authToken: "+str(cl.authToken)) cl.log("channelToken: "+str(channelToken)) oepoll = OEPoll(cl) clMID = cl.profile.mid def restartBOT(): time.sleep(3) os.execl(sys.executable, sys.executable, [args[0], cl.authToken]) def clBot(op): try: if os.path.isfile("line.log"): with open("line.log","r", "utf-8", "ignore") as f: log = f.read() else: log = "" if op.type == 0: cl.log("[ 0 ] END OF OPERATION") if op.type == 5: cl.log("[ 5 ] NOTIFIED ADD CONTACT") displayName = cl.getContact(op.param1).displayName mid = cl.getContact(op.param1).mid print("Add Contact: "+mid+"/"+displayName) log = "["+str(datetime.datetime.now())+"] Add Contact: "+mid+"/"+displayName+"\n\n"+log if op.type == 13: cl.log("[ 13 ] NOTIFIED INVITE GROUP") gid = op.param1 gname = cl.getGroup(gid).name print("Invite Group: "+gid+"/"+gname) log = "["+str(datetime.datetime.now())+"] Invite Group: "+gid+"/"+gname+"\n\n"+log time.sleep(10) cl.acceptGroupInvitation(gid) print("Joined Group: "+gid+"/"+gname) log = "["+str(datetime.datetime.now())+"] Joined Group: "+gid+"/"+gname+"\n\n"+log if op.type == 24: cl.log("[ 24 ] NOTIFIED LEAVE ROOM") #mid = op.param1 #cl.leaveRoom(mid) #print("Left Room: "+mid) if op.type == 25: cl.log("[ 25 ] SEND MESSAGE") to = op.message.to contentType = op.message.contentType messageId = op.message.id text = op.message.text if contentType == 0: if text is None: return if to.startswith("u"): displayName = cl.getContact(to).displayName print("Send Message: "+to+"/"+displayName+" "+messageId+" "+text) log = "["+str(datetime.datetime.now())+"] Send Message: "+to+"/"+displayName+" "+messageId+" "+text+"\n\n"+log if to.startswith("r"): print("Send Message: Room "+to+" "+messageId+" "+text) log = "["+str(datetime.datetime.now())+"] Send Message: Room "+to+" "+messageId+" "+text+"\n\n"+log if to.startswith("c"): name = cl.getGroup(to).name print("Send Message: Group "+to+"/"+name+" "+messageId+" "+text) log = "["+str(datetime.datetime.now())+"] Send Message: Group "+to+"/"+name+" "+messageId+" "+text+"\n\n"+log if contentType == 7: stickerId = op.message.contentMetadata["STKID"] stickerVersion = op.message.contentMetadata["STKVER"] packageId = op.message.contentMetadata["STKPKGID"] if to.startswith("u"): displayName = cl.getContact(to).displayName print("Send Message: "+to+"/"+displayName+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId) log = "["+str(datetime.datetime.now())+"] Send Message: "+to+"/"+displayName+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId+"\n\n"+log if to.startswith("r"): print("Send Message: Room "+to+" "+messageId+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId) log = "["+str(datetime.datetime.now())+"] Send Message: Room "+to+" "+messageId+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId+"\n\n"+log if to.startswith("c"): name = cl.getGroup(to).name print("Send Message: Group "+to+"/"+name+" "+messageId+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId) log = "["+str(datetime.datetime.now())+"] Send Message: Group "+to+"/"+name+" "+messageId+" "+messageId+" "+stickerId+","+stickerVersion+","+packageId+"\n\n"+log if text.lower() == "restart": with open("line.log", "w", "utf-8", "ignore") as f: f.write(log) restartBOT() if op.type == 26: cl.log("[ 26 ] RECEIVE MESSAGE") to = op.message.to _from = op.message._from messageId = op.message.id text = op.message.text if to == clMID: displayName = cl.getContact(_from).displayName cl.sendChatChecked(_from, messageId) else: name = cl.getGroup(to).name displayName = cl.getContact(_from).displayName cl.sendChatChecked(to, messageId) if op.message.contentType == 0: if "MENTION" in op.message.contentMetadata.keys() != None: names = re.findall(r'@(\w+)', text) mention = ast.literal_eval(op.message.contentMetadata["MENTION"]) mentionees = mention["MENTIONEES"] lists = [] for mention in mentionees: if clMID in mention["M"]: if to == clMID: print("Receive Message: "+_from+"/"+displayName+" "+messageId+" Mention") log = "["+str(datetime.datetime.now())+"] Receive Message: "+_from+"/"+displayName+" "+messageId+" Mention"+"\n\n"+log else: print("Receive Message: "+to+"/"+name+" "+_from+"/"+displayName+" "+messageId+" Mention") log = "["+str(datetime.datetime.now())+"] Receive Message: "+to+"/"+name+" "+_from+"/"+displayName+" "+messageId+" Mention"+"\n\n"+log if text is None: return if to == clMID: print("Receive Message: "+_from+"/"+displayName+" "+messageId+" "+text) log = "["+str(datetime.datetime.now())+"] Receive Message: "+_from+"/"+displayName+" "+messageId+" "+text+"\n\n"+log else: print("Receive Message: "+to+"/"+name+" "+_from+"/"+displayName+" "+messageId+" "+text) log = "["+str(datetime.datetime.now())+"] Receive Message: "+to+"/"+name+" "+_from+"/"+displayName+" "+messageId+" "+text+"\n\n"+log if text.lower() == "restart": restartBOT() if op.type == 15: cl.log("[ 15 ] MEMBER JOIN TO GROUP") gid = op.param1 name = cl.getGroup(gid).name if op.param2 in clMID: print("Member Join To Group: "+gid+"/"+name+" Me") log = "["+str(datetime.datetime.now())+"] Member Join To Group: "+gid+"/"+name+" Me"+"\n\n"+log return mid = op.param2 displayName = cl.getContact(mid),displayName print("Member Join To Group: "+gid+"/"+name+" "+mid+"/"+displayName) log = "["+str(datetime.datetime.now())+"] Member Join To Group: "+gid+"/"+name+" "+mid+"/"+displayName+"\n\n"+log if op.type == 15: cl.log("[ 15 ] MEMBER LEAVE TO GROUP") mid = op.param2 gid = op.param1 name = cl.getGroup(gid).name if mid == clMID: print("Member Leave To Group: "+gid+"/"+name+" Me") log = "["+str(datetime.datetime.now())+"] Member Leave To Group: "+gid+"/"+name+" Me"+"\n\n"+log displayName = cl.getContact(mid).displayName print("Member Leave To Group: "+gid+"/"+name+" "+mid+"/"+"displayName") log = "["+str(datetime.datetime.now())+"] Member Leave To Group: "+gid+"/"+name+" "+mid+"/"+"displayName"+"\n\n"+log with open("line.log", "w", encoding="UTF-8") as f: f.write(log) except Exception as e: cl.log(e) while True: try: ops = oepoll.singleTrace(count=50) if ops is not None: for op in ops: clBot(op) oepoll.setRevision(op.revision) except Exception as e: cl.log(e)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

otn

2020/01/14 11:36

エラーメッセージの意味が分からないということですか? エラー発見行の行番号が出ていませんか?
shiracamus

2020/01/14 11:37

どの行でエラーなのですか?
退会済みユーザー

退会済みユーザー

2020/01/14 11:40 編集

[2020-01-14 20:37:27.655335] an integer is required (got type str) [2020-01-14 20:37:27.655335] an integer is required (got type str) [2020-01-14 20:37:27.820091] an integer is required (got type str) [2020-01-14 20:37:27.820848] an integer is required (got type str) こんな感じで出てきます エラー行などは何故か出てきません
shiracamus

2020/01/14 11:44 編集

Pythonの実行エラーではなく、エラーメッセージを正常受信したのですか? 送信内容に問題があるということであれば、送信内容を全部printしてみてはいかがですか?
退会済みユーザー

退会済みユーザー

2021/11/15 02:13 編集

tryをなくしたら出てきました Traceback (most recent call last): File "c:/Users/****/Desktop/readBot.py", line 196, in <module> clBot(op) File "c:/Users/****/Desktop/readBot.py", line 58, in clBot with open("line.log","r", "utf-8", "ignore") as f: TypeError: an integer is required (got type str) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:/Users/****/Desktop/readBot.py", line 199, in <module> logError(e) NameError: name 'logError' is not defined
退会済みユーザー

退会済みユーザー

2020/01/14 11:59

どうやら open でエラーになっていると思われますが、 エラーの意味が分かりません

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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