簡體   English   中英

TypeError:&:不支持的操作數類型:“ NoneType”和“ str”

[英]TypeError: unsupported operand type(s) for &: 'NoneType' and 'str'

我在學校為作業分配字符打印機時遇到了一些問題,盡管在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

print函數始終返回None ,並且您正在使用print(insertText.upper())的返回值執行位與運算,這是一個字符串,這會導致上述錯誤。

您應該使用括號將整個表達式括起來作為參數來調用print

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

您的問題是在Python 3+中,print是一個返回None的函數,因此:

print(forwardSlash * text1length)

返回None ,並且

insertText.upper()

返回一個str 因此,您無法對Nonestr進行按位&運算。

解決此問題的一種非常好的方法是使用f字符串,這是Python 3.6以來提供的Python功能:

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

這將使您的代碼更具可讀性。 看到您不需要使用+連接字符串,這可能會引起混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM