TypeError:不支持&:'NoneType'和'str'的操作数类型

2024-09-28 21:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直有一些问题,创建一个字符打印机在学校的作业,我不知道如何解决它,尽管到处找StackOverflow。我试图让用户能够输入他们想要的前两个顶部和底部的符号,并让他们的两个文本根据字长以正斜杠和反斜杠居中。然而,这已被证明是一个问题

我尝试过改变变量,也尝试过创建将文本长度封装成整数的变量,但这被证明是不成功的

Repeats = input("How many times should the symbol repeat (1-30 CHARACTERS)?:")
insertText = input("Please enter text:")
insertText = str(insertText)
insertMoreText =input("Please enter text (again):")
insertMoreText= str(insertMoreText)
Repeats = int(Repeats)

#Determining text lengths/stored variables:
text1length = len(insertText)
text2length = len(insertMoreText)
forwardSlash = str("/")
backSlash = str("\\")
symbolsbeforeText = "*"
if(Repeats <= 30):
    print(firstSymbol * Repeats)
    print(secondSymbol * Repeats)
    print(symbolsbeforeText * Repeats)
    print (forwardSlash * text1length) & (insertText.upper()) & (forwardSlash 
    * text1length)
    print (backSlash * text2length) + (insertMoreText.lower()) + (backSlash * 
    text2length)
    print(symbolsbeforeText * Repeats)
    print(secondSymbol * Repeats)
    print(firstSymbol * Repeats)    
else:
    print("You have reached the repetition threshold, please try again.")

错误:

Traceback (most recent call last):
 File "C:\Users\colby\trainingTime.py", line 28, in <module>
 print (forwardSlash * text1length) & (insertText.upper()) & 
 (forwardSlash * text1length)
 TypeError: unsupported operand type(s) for &: 'NoneType' and 'str'

Process terminated with an exit code of 1

Tags: text文本证明inputprint斜杠strrepeats
2条回答

您的问题是,在python3+中,print是一个返回None的函数,因此:

print(forwardSlash * text1length)

返回None,并且

insertText.upper()

返回str。因此,不能对Nonestr执行逐位&操作

解决这个问题的一个非常好的方法是使用f-string,这是自python3.6以来的一个Python特性:

print(f"{backSlash * text2length} {insertMoreText.lower()} {backSlash * text2length}")

这将使您的代码更具可读性。请注意,不需要使用+连接字符串,这可能会导致混淆

print函数总是返回None,您使用返回值print(insertText.upper())执行按位“与”运算,这是一个字符串,它会导致上述错误

您应该调用print,将整个表达式作为参数括在括号中:

print((forwardSlash * text1length) & (insertText.upper()) & (forwardSlash * text1length))
print((backSlash * text2length) + (insertMoreText.lower()) + (backSlash * text2length))

相关问题 更多 >