优秀的编程知识分享平台

网站首页 > 技术文章 正文

解决报错:%d format: a number is required, not str

nanyue 2024-08-27 18:15:35 技术文章 11 ℃


运行时突然报了一个:%d format: a number is required, not str

翻译后就是:格式化时需要的是一个数字而不是一字符串

排查了一圈是数据库连接导致的问题,主要原因还是自己的疏忽导致

# 部分代码
 
def _db(sql):
    conn = pymysql.connect(host="101.101.12.86", port="3307", user="root", 
                            password="123456", db="django-dev", charset="utf8")
    ......

上述代码中的port端口传的值是字符串类型,抛错原因也是因为是这个导致的,以为它格式化时规定的是整数类型,也就是%d

我们再看源码,源码中有一段介绍,判断了port如果不是int类型,就会抛错误

# 部分源码
 
        # 判断port的类型是不是int,如果不是int就抛出错误
        self.port = port or 3306
        if type(self.port) is not int:
            raise ValueError("port should be of type int")
 
 
                    
                    # 最终的抛错误点是在这里格式化的时候抛出来的
 
                    self.host_info = "socket %s:%d" % (self.host, self.port)
                    if DEBUG:
                        print("connected using socket")

解决方法:把port的类型修改为整数类型,再运行就行了

# 部分代码
 
def _db(sql):
    conn = pymysql.connect(host="101.101.12.86", port=3307, user="root", 
                            password="123456", db="django-dev", charset="utf8")
    ......


以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!

微信搜索公众号:就用python

Tags:

最近发表
标签列表