[英]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.