Python TypeError: must be str, not int for a String

Python TypeError: must be str, not int for a String

我正在处理一个 Python(3.6) 项目,我需要在其中将一个整数值附加到多行字符串。

这是我的代码:

    for var in list(range(1, no_of_svc + 1)):
        svar = str(var)
        print(type(svar))
        port = type(data['configuration']['svc' + svar]['port']['port'])
        print(port)
        port = str(data['configuration']['svc' + svar]['port']['port'])
        deployments = deployment + '''\n
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ''' + data['deployment_name'] + '''-''' + data['configuration']['svc' + str(var)]['name'] + '''
  labels:
    #Project ID
    app: ''' + data['configuration']['svc' + str(var)]['name'] + '''
spec:
  #Run two instances of our application
  replicas: ''' + data['configuration']['svc' + str(var)]['replicas'] + '''
  template:
    metadata:
      labels:
        app: ''' + data['configuration']['svc' + str(var)]['name'] + '''
    spec:
      #Container details
      containers:
        - name: ''' + data['configuration']['svc' + str(var)]['versions']['v1']['name'] + '''
          image: ''' + data['configuration']['svc' + str(var)]['versions']['v1']['image'] + '''
          imagePullPolicy: Always
          #Ports to expose
          ports:
          - containerPort: ''' + port + '''        
'''

正如您在上面的代码中看到的那样,我已将 port 转换为字符串,甚至 print(type(svar))print(port) 的输出也是 <class 'str'> 但它仍然无法正常工作.

错误信息如下:

   - containerPort: ''' + port + '''
 TypeError: must be str, not int

I have turned it by using the format method and it's working:

    no_of_svc = int(data['configuration']['no_of_svc'])
    deployment = ''
    deployments = ''''''
    for var in list(range(1, no_of_svc + 1)):
        deployments = deployment + '''\n
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {}
  labels:
    #Project ID
    app: {}
spec:
  #Run two instances of our application
  replicas: {}
  template:
    metadata:
      labels:
        app: {}
    spec:
      #Container details
      containers:
        - name: {}
          image: {}
          imagePullPolicy: Always
          #Ports to expose
          ports:
          - containerPort: {}        
'''.format(data['deployment_name'] + '-' + data['configuration']['svc' + str(var)]['name'],
           data['configuration']['svc' + str(var)]['name'],
           data['configuration']['svc' + str(var)]['replicas'],
           data['configuration']['svc' + str(var)]['name'],
           data['configuration']['svc' + str(var)]['versions']['v1']['name'],
           data['configuration']['svc' + str(var)]['versions']['v1']['image'],
           data['configuration']['svc' + str(var)]['port']['port'])
    print(deployments)

有什么问题吗?

使用 formatport 的值放入您的字符串中。

看到这个:-

>>> port = 'my string1'
>>> str1 = ''' this is the second string and here is {} '''.format(port)
>>> str1
' this is the second string and here is my string1 '

错误消息/回溯将您指向检测到错误的位置,而不一定是错误真正发生的位置。我们无法重现该错误,因为您没有 post 正确的 MCVE(我们不知道您的 data 中有什么),但真正的问题可能实际上是众多其他值之一从代码中的 data 上方连接(请记住,对于 python ,整个 deployment = deployment + '''(...)''' 是一个语句。

但无论如何:你从一开始就做错了。您想要 use string formatting operations 而不是串联,这更具可读性并且会处理必要的转换。