Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型错误:Can';t转换为';int';对象隐式地转换为str(python)_Python_C++_Algorithm - Fatal编程技术网

类型错误:Can';t转换为';int';对象隐式地转换为str(python)

类型错误:Can';t转换为';int';对象隐式地转换为str(python),python,c++,algorithm,Python,C++,Algorithm,已解决和修复 我该怎么关闭这个D 我最近一直在努力为我的手机添加功能 聊天机器人,偶尔会遇到一个问题,我需要帮助。 我已经看过其他建议的线程了 简短的解释: elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1: args = args.lower() if len(args) == 0: post("Select a dice amount(6,8,10,20)")

已解决和修复 我该怎么关闭这个D

我最近一直在努力为我的手机添加功能 聊天机器人,偶尔会遇到一个问题,我需要帮助。 我已经看过其他建议的线程了

简短的解释:

  elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
      args = args.lower()
      if len(args) == 0: post("Select a dice amount(6,8,10,20)")
      else:
        if args == "6": post("Rolled %s" % random.randint(1,6))
        elif args == "8": post("Rolled %s" % random.randint(1,8))
        elif args == "10": post("Rolled %s" % random.randint(1,10))
        elif args == "20": post("Rolled %s" % random.randint(1,20))
        else: post("Select a dice amount(6,8,10,20")
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
  args = args.lower()
  n = args.lower()
  if len(args) == 0: post("Select a dice amount(6,8,10,20)")
  else:
    post("Rolled %s" % str(random.randint(1,n)))
试图让它选择一个介于1和n之间的数字。用户可以执行的命令 使用be/roll 20,返回1-20。我试图让args替换
random.randint(n)
,而n=integer。对不起,如果我的解释不好。连续工作了好几天

尝试之前的原始代码(python):

  elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
      args = args.lower()
      if len(args) == 0: post("Select a dice amount(6,8,10,20)")
      else:
        if args == "6": post("Rolled %s" % random.randint(1,6))
        elif args == "8": post("Rolled %s" % random.randint(1,8))
        elif args == "10": post("Rolled %s" % random.randint(1,10))
        elif args == "20": post("Rolled %s" % random.randint(1,20))
        else: post("Select a dice amount(6,8,10,20")
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
  args = args.lower()
  n = args.lower()
  if len(args) == 0: post("Select a dice amount(6,8,10,20)")
  else:
    post("Rolled %s" % str(random.randint(1,n)))
尝试后的最终结果代码(Python):

  elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
      args = args.lower()
      if len(args) == 0: post("Select a dice amount(6,8,10,20)")
      else:
        if args == "6": post("Rolled %s" % random.randint(1,6))
        elif args == "8": post("Rolled %s" % random.randint(1,8))
        elif args == "10": post("Rolled %s" % random.randint(1,10))
        elif args == "20": post("Rolled %s" % random.randint(1,20))
        else: post("Select a dice amount(6,8,10,20")
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
  args = args.lower()
  n = args.lower()
  if len(args) == 0: post("Select a dice amount(6,8,10,20)")
  else:
    post("Rolled %s" % str(random.randint(1,n)))
回溯

    [STATUS] Setting status Online...
    [LOAD] Loading Errors...
    [LOAD] Loading Locks...
    [SAVE] Appending default...
    Connected 
    Connected 
    Youcoldyet(4)-[devlcars]:[/roll 20](Monday, 11 May 2015, 01:07:23 AM)
    [ERR] Fatal error.
    (C:\Python34\lib\random.py:218) Can't convert 'int' object to str implicitly
    Traceback (most recent call last):
      File "C:\Users\Administrator\Downloads\hmm\bot.py", line 575, in <module>
        TestBot.easy_start(rooms, "Hidden", "Hidden")
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 1278, in easy_start
        self.main()
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 1254, in main
        con._feed(data)
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 550, in _feed
        self._process(food.decode().rstrip("\r\n")) #numnumz ;3
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 560, in _process
        getattr(self, func)(args)
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 670, in rcmd_u
        self._callEvent("onMessage", msg.user, msg)
      File "C:\Users\Administrator\Downloads\hmm\ck.py", line 957, in _callEvent
        getattr(self.mgr, evt)(self, *args, **kw)
      File "C:\Users\Administrator\Downloads\hmm\bot.py", line 447, in onMessage
        post("Rolled %s" % str(random.randint(1,n)))
      File "C:\Python34\lib\random.py", line 218, in randint
        return self.randrange(a, b+1)
    TypeError: Can't convert 'int' object to str implicitly

[96m[SAV][0m Saving Rooms..
[STATUS] Setting status Offline...
Waiting 30 seconds for you to read the error..
我甚至将行更改为
post(“Rolled%s”%str(random.randint(1,n)))
,但失败了

哦,如果你想知道这是一个角色扮演的滚动命令
欢迎任何和所有反馈/建议。我希望能解决这个问题。

random.randint(1,n)
中使用之前,需要将
n
转换为整数

您可以使用random.randint(1,int(n))
randint(a,b)
需要两个整数,但您给它一个整数和一个字符串

不应将
randint
的结果转换为字符串,而应将第二个参数转换为整数:

    post("Rolled %s" % random.randint(1,int(n)))
如果不能将
n
解析为整数(即“/roll foo”),则会抛出
ValueError

澄清:

  elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
      args = args.lower()
      if len(args) == 0: post("Select a dice amount(6,8,10,20)")
      else:
        if args == "6": post("Rolled %s" % random.randint(1,6))
        elif args == "8": post("Rolled %s" % random.randint(1,8))
        elif args == "10": post("Rolled %s" % random.randint(1,10))
        elif args == "20": post("Rolled %s" % random.randint(1,20))
        else: post("Select a dice amount(6,8,10,20")
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
  args = args.lower()
  n = args.lower()
  if len(args) == 0: post("Select a dice amount(6,8,10,20)")
  else:
    post("Rolled %s" % str(random.randint(1,n)))
错误消息有点混乱,因为调用
random.randint(a,b)
时发生的情况是,该方法将调用
random.randrange(a,b+1)
而不对其参数进行任何类型检查,从而导致(C)Python抛出一个关于无法将整数
1
转换为字符串的错误(因为
b
是一个字符串)

如果您执行以下操作,您可以亲自看到这一点:

Python 3.4.3 (default, Apr 13 2015, 22:30:47) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> "8" + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
如果我们也调用
random.randint(1,“8”)
的话,这可能会发生


请随意向Python提交有关此问题的错误

问题在于此调用:

randint(1,n)

这里n是一个字符串,
randint
期望它是一个int。我同意错误消息有点误导性。

如果您不只是剪切错误消息,而是向我们显示整个堆栈跟踪以及导致错误的行数,那么帮助您会容易得多。@Reutsharbani Post通过b发送消息在聊天室而不是控制台上。很难让这个SSCCE。太棒了!我不知道它是如何工作的。所以每当我做类似的事情时,我总是要添加第二个参数?我明白了。这就解释了randint return self.range(a,b+1)中218行的
文件“C:\Python34\lib\random.py”
我看到了!感谢您的澄清。我会确保将此提交给问题跟踪者!还有什么方法可以防止值错误?我尝试了
if args!=int:post(“错误。请选择一个整数”)
但是,它也在发布整数。我觉得如果我把这个问题保留在那里,它是不完整的,因为它会导致崩溃。请看一看如何使用try/excepthanks实现这一点!现在我明白了,对于类似的情况,我必须始终添加第二个参数。我对python还是新手,所以事情往往会让我相当容易困惑。感谢您的帮助解释!