You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python密码生成器报错:'function'对象无法被解释为整数,求解决

问题解决:TypeError: 'function' object cannot be interpreted as an integer

错误根源

你犯了两个关键错误:

  1. char_length()函数里,最后只写了return,没有返回你输入的长度数值,导致函数执行后默认返回None;
  2. 调用random_pass时,你传的是char_length(这是函数本身的引用),而不是执行函数得到的整数结果char_length()。range()需要整数参数,传入函数对象自然会报错。

修正步骤

  • 修改char_length()函数,把return改成return char_length,确保返回用户输入的合法长度数值;
  • 调用random_pass时,传入char_length()的执行结果,而不是函数名;
  • 顺带修正原代码No分支的逻辑错误:原代码直接把生成的密码赋值给characters,变量名逻辑混乱,调整为先定义字符集再生成密码。

修正后的完整代码

import random
import string

def char_length():
    while True:
        char_length = input("How many characters would you like your password to be? ")
        if char_length.isdigit() and 0 < int(char_length) < 51:
            char_length = int(char_length)
            return char_length  # 返回合法的长度数值
        else:
            print('Response must be a number between 0 and 50')

def random_pass(length):
   while True:
      spec_char = input("Would you like special characters in your password? ")
      if spec_char == "Yes":
          characters = string.ascii_letters + string.digits + string.punctuation
          password = ''.join(random.choice(characters) for i in range(length))
          print("Your password is: ", password)
          return
      elif spec_char == "No":
          characters = string.ascii_letters
          password = ''.join(random.choice(characters) for i in range(length))
          print("Your password is: ", password)
          return
      else:
          print("Please only type Yes or No")

# 传入函数执行后的长度数值
random_pass(char_length())

内容的提问来源于stack exchange,提问作者phldlphegls1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:22:33