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