Django中Celery Broker URL含#报错,求有效转义方法
解决Celery AMQP Broker URL中密码含#的解析错误
嘿,这个问题我之前踩过一模一样的坑!你碰到的ValueError: invalid literal for int() with base 10: 'pass',本质是URL解析器把密码里的#当成了片段标识符(锚点)的起始符号——它误以为#后面的内容是URL的锚点部分,所以把pass错误识别成了端口号去转成整数,自然就炸了。
你之前试的u""、r""或者直接加\转义,都是Python字符串层面的处理,根本没解决URL语法层面的特殊字符问题,所以完全没用。正确的解法是对#做URL编码,#对应的URL编码值是%23。
把你的Broker URL改成下面这样就能正常运行了:
app = Celery('myapp', broker='amqp://user:pass%231@localhost:5672//', backend='rpc://', include=['myapp.tasks'])
顺带提一句:URL里的特殊字符(比如#、@、&、空格这些)都需要用百分号编码转义,这样解析器才会把它们当成普通字符处理,不会触发特殊语法逻辑。
内容的提问来源于stack exchange,提问作者Zany
相关产品推荐
相关产品推荐

