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)
有什么问题吗?
使用 format
将 port
的值放入您的字符串中。
看到这个:-
>>> 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 而不是串联,这更具可读性并且会处理必要的转换。
我正在处理一个 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)
有什么问题吗?
使用 format
将 port
的值放入您的字符串中。
看到这个:-
>>> 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 而不是串联,这更具可读性并且会处理必要的转换。