簡體   English   中英

是否可以使用exec()運行縮進塊?

[英]Is it possible to run indented blocks using exec()?

使用exec() python命令,可以運行縮進的代碼塊(如if/else語句或try/except )。 例如:

name = input("Enter name: ")
if name == "Bob":
     print("Hi bob")
else:
     print("Hi user")

目前,我正在使用它來運行代碼:

code_list = []
while True:
     code = input("Enter code or type end: ")
     if code == "end":
          break
     else:
          code_list.append(code)
for code_piece in code_list:
     exec(code_piece)

我也知道這不是讓用戶輸入自己的代碼的“ Python風格”或“良好實踐”,但這對我代碼的其他部分很有用。

這里的問題不是縮進。 問題是您要一一exec復合語句的各行。 沒有完整的內容,Python無法理解復合語句。

exec整個輸入作為單個單元:

exec('\n'.join(code_list))

exec()文檔中:

此功能支持動態執行Python代碼。 對象必須是字符串或代碼對象。 如果是字符串,則將字符串解析為一組Python語句,然后將其執行...

因此,您可以做類似的事情

exec("a=2\nb=3")
exec("if a==2:\n\tprint(a)\nelse:\tprint(b)")

您只需要遵循正確的語法和縮進即可。

在exec()函數中格式化代碼的另一種方法是使用三引號,這使查看代碼的外觀變得容易。

code = """                     # Opening quotes
for i in range(0, 10):         # Code line 1         
    print(i)                   # Code line 2
"""                            # Closing quotes
exec(code)

如果您要求用戶輸入代碼,這可能行不通,但這可能會派上用場。

暫無
暫無

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

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