我在使用此代码时遇到了一些麻烦:
count_bicycleadcategory = 0
for item_bicycleadcategory in some_list_with_integers:
exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=' + str(item_bicycleadcategory) + ')' % count_bicycleadcategory
count_bicycleadcategory = count_bicycleadcategory + 1
我收到了一个错误:
Type Error, not all arguments converted during string formatting
我的问题是:关于如何将“item_bicycleadcategory”传递给exec表达式的任何线索?
最诚挚的问候,
答案 0 :(得分:3)
您已经在使用python的格式语法:
"string: %s\ndecimal: %d\nfloat: %f" % ("hello", 123, 23.45)
此处有更多信息:http://docs.python.org/2/library/string.html#format-string-syntax
答案 1 :(得分:2)
首先,exec
比eval()
更危险,因此绝对确保您的输入来自可靠来源。即使这样,你也不应该这样做。看起来你正在使用一个Web框架或类似的东西,所以真的不这样做!
问题在于:
exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=' + str(item_bicycleadcategory) + ')' % count_bicycleadcategory
仔细看看。您正在尝试将字符串格式化参数放在单个parentesis中,而不使用')' % count_bicycleadcategory
的格式字符串。
你可以这样做:
exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=' % count_bicycleadcategory + str(item_bicycleadcategory) + ')'
但你真正应该做的就是不使用exec
!
创建模型实例列表并改为使用它。
答案 2 :(得分:1)
对于python 2.7,你可以使用格式:
string = '{0} give me {1} beer'
string.format('Please', 3)
出:
请给我3杯啤酒
你可以用format
做很多事情,例如:
string = '{0} give me {1} {0} beer'
出:
请给我3请啤酒。
答案 3 :(得分:-1)
试试这个:
exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=%s)' % (count_bicycleadcategory, str(item_bicycleadcategory))
(你不能同时混合%s
和字符串+
连接)
答案 4 :(得分:-2)
试试这个:
exec 'model_bicycleadcategory_%d.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=%d)' % (count_bicycleadcategory, item_bicycleadcategory)