python-3.x python意思 - “SyntaxError:調用'print'時缺少括號”是Python中的意思嗎?





print換行 print用法 (5)


從Python 2到Python 3的語法有所變化。在Python 2中,

 print "Hello world!" will work but

在python 3中,使用大括號

print("Hello world!")

這是scala和java的等價語法。

當我嘗試在Python中使用print語句時,它給了我這個錯誤:

>>> print "Hello world!"
  File "<stdin>", line 1
    print "Hello world!"
                       ^
SyntaxError: Missing parentheses in call to 'print'

那是什麼意思?




如果你的代碼應該可以在Python 2和3中運行。你可以通過在你的程序開始時加載它來實現:

from __future__ import print_function   # if code has to work in python 2 and 3!

然後你可以用python 3打印:

print("python")

如果你想打印一些東西而不需要創建一個新行 - 你可以這樣做:

for number in range(0, 10):
    print(number, end=', ')



不幸的是,舊的xkcd漫畫並不完全是最新的。

從Python 3.0開始,你必須寫下:

print("Hello world!")

還有人仍然寫這個antigravity庫:(




此錯誤消息意味著您正在嘗試使用Python 3來跟踪示例或運行使用Python 2 print語句的程序:

print "Hello world"

上面的語句在Python 3中不起作用。在Python 3中,您需要在要打印的值周圍添加括號:

print("Hello world")

“SyntaxError:在調用'print'時缺少括號”是Python 3.4.2中添加的一個新錯誤消息,主要用於幫助嘗試在運行Python 3時遵循Python 2教程的用戶。

在Python 3中,打印值從一個不同的語句變成了一個普通的函數調用,所以它現在需要括號:

>>> print("Hello world!")
Hello world!

在Python 3的早期版本中,解釋器僅報告一般語法錯誤,而沒有提供任何有關可能出錯的有用提示:

>>> print "Hello world!"
  File "<stdin>", line 1
    print "Hello world!"
                       ^
SyntaxError: invalid syntax

至於為什麼 print在Python 3中變成了一個普通的函數,這與語句的基本形式沒有關係,而是關於如何做更複雜的事情,比如將多個項目打印到尾隨空格而不是尾行。

在Python 2中:

>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6

在Python 3中:

>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6

從2017年9月的Python 3.6.3版本開始,與Python 2.x打印語法相關的一些錯誤消息已經更新,以推薦他們的Python 3.x對應版本:

>>> print "Hello!"
  File "<stdin>", line 1
    print "Hello!"
                 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

由於“調用打印中缺少圓括號”的情況是編譯時語法錯誤,因此可以訪問原始源代碼,因此可以在建議的替換中的行的其餘部分包含全文。 然而,它目前並不試圖找出適當的引號來表達這種表達方式(這不是不可能的,只是非常複雜而沒有完成)。

針對右移操作符提出的TypeError也被定制:

>>> print >> sys.stderr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?

由於在代碼運行時引發此錯誤,而不是在編譯時發生此錯誤,因此它無法訪問原始源代碼,因此在建議的替換錶達式中使用元變量( <message><output_stream> )無論用戶實際輸入什麼。 與語法錯誤情況不同的是,在自定義右移錯誤消息中圍繞Python表達式引用引號很簡單。




更多的提示而不是答案(不需要在hundreth時間重複顯而易見的事情),但我有時會將它用作此類構造中的oneliner快捷方式:

if conditionX:
    print('yes')
else:
    print('nah')

,成為:

print('yes') if conditionX else print('nah')

有些(很多:)可能會皺眉頭(甚至是ruby-ish :),但我個人認為它更自然 - 即你如何正常表達它,以及在大塊代碼中更具視覺吸引力。







python python-3.x