在字符串格式化期间获取TypeError

时间:2016-02-11 21:04:31

标签: python

key=12
head=851
file_pdf='pdf'

s=new_folder+'/'+file_pdf+'/'+'%s-%s.'+file_pdf+'heu'%(str(key),str(head),)
  

回溯(最近一次呼叫最后一次):文件"",第1行,in   TypeError:不是在字符串格式化期间转换的所有参数

这有什么问题?为什么我收到字符串格式错误。我给了两个参数和两个格式说明符。我做了一切都没有一个元组,但仍然没有工作。

1 个答案:

答案 0 :(得分:1)

请参阅下文,了解使用os.path.join()构建文件路径的更好方法。

对于直接问题,元组中的2个参数仅与最后一个字符串'heu'相关联。这是因为%的运算符优先级高于+。因为'heu'中没有格式说明符,您会收到错误:

key=12
head=851
file_pdf='pdf'

>>> 'heu' % (str(key), str(head),)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

您需要确保在插值发生之前评估字符串的其他组件。你可以用括号做到这一点:

>>> s = (new_folder + '/' +file_pdf + '/' + '%s-%s.' + file_pdf + 'heu') % (str(key), str(head),)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'new_folder' is not defined

因此未指定new_folder

>>> new_folder = 'blah'
>>> s = (new_folder + '/' +file_pdf + '/' + '%s-%s.' + file_pdf + 'heu') % (str(key), str(head),)
>>> print(s)
blah/pdf/12-851.pdfheu

或者您可以将元组直接应用于所需的字符串:

>>> s = new_folder + '/' +file_pdf + '/' + '%s-%s.' % (str(key), str(head),) + file_pdf + 'heu'

现在,考虑到你实际上要做的事情,你可能最好使用os.path.join()将各个部分放在一起:

>>> import os.path
>>> s = os.path.join(new_folder, file_pdf, '%s-%s.%sheu' % (key, head, file_pdf))
>>> print(s)
blah/pdf/12-851.pdfheu