运行时突然报了一个:%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

 

 

 

Logo

更多推荐