0

我在让这段代码工作时遇到了一些麻烦:

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 表达式的任何线索?

最好的祝福,

4

5 回答 5

3

您已经在使用 python 的格式语法:

"string: %s\ndecimal: %d\nfloat: %f" % ("hello", 123, 23.45)

更多信息在这里:http ://docs.python.org/2/library/string.html#format-string-syntax

于 2013-01-06T19:04:46.870 回答
2

首先,exec比 更危险eval(),因此请绝对确保您的输入来自受信任的来源。即使那样,你也不应该这样做。看起来您正在使用 Web 框架或类似的东西,所以真的不要这样做!

问题是这样的:

exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=' + str(item_bicycleadcategory) + ')' % count_bicycleadcategory

细看。您正在尝试将字符串格式参数放在一个没有格式字符串的单括号中')' % count_bicycleadcategory

你可以这样做:

exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=' % count_bicycleadcategory + str(item_bicycleadcategory) + ')' 

但是你真正应该做的是根本不exec 使用

创建一个模型实例列表并使用它。

于 2013-01-06T19:13:48.163 回答
1

对于 python 2.7,你可以使用格式:

string = '{0} give me {1} beer'
string.format('Please', 3)

出去:

请给我3杯啤酒

你可以用 做很多事情format,例如:

string = '{0} give me {1} {0} beer'

出去:

请给我 3 请啤酒。

于 2013-01-06T19:10:19.480 回答
-1

试试这个 :

exec 'model_bicycleadcategory_%s.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=%s)' % (count_bicycleadcategory, str(item_bicycleadcategory))

(你不能同时混合%s和字符串+连接)

于 2013-01-06T19:12:48.373 回答
-2

试试这个:

exec 'model_bicycleadcategory_%d.bicycleadcategorytype = BicycleAdCategoryType.objects.get(pk=%d)' % (count_bicycleadcategory, item_bicycleadcategory)
于 2013-01-06T19:10:07.633 回答