2013-05-05 177 views
3

我試圖做到這一點:Python的 - 使用字符串作爲條件if語句

a = "1 or 0" 
if (a): Print "true" 

所以我可以用一個字符串作爲一個if語句的條件。這可能嗎?

+3

是的,但它強烈建議不要。改變你的代碼以避免這種情況會更好。 – Volatility 2013-05-05 07:25:23

+0

@Volatility誰勸阻?不是由PEP-8寫的,「對於序列(字符串,列表,元組),使用空序列是錯誤的事實。」 – 2013-05-05 08:23:08

+0

@Anonymous:這個字符串是有效的Python代碼(我認爲這是有意的),所以我認爲OP基本上是問「我能把這個字符串當作代碼來評估它」,這就是'eval'的意思。 – Blender 2013-05-05 08:25:56

回答

2

對於if語句if it is not empty,字符串始終爲True,因此在if語句中使用它是沒有用的。

In [12]: my_str = 'a=a' 

In [13]: if my_str: 
    ....:  print True 
    ....: else: 
    ....:  print False 
    ....:  
True 

In [14]: new_str = '' 

In [15]: if new_str: 
    ....:  print True 
    ....: else: 
    ....:  print False 
    ....:  
False 

In [16]: 

因此,儘量傳遞一些計算爲布爾值的真實條件。

3

您可以將字符串「a ==」與您的輸入字符串和eval()它合併。您應該小心執行此操作,因爲您允許執行任意代碼。

9

這是可能的,但不這樣做:

a = '1 or 0' 

if eval(a): 
    print 'a is True' 

eval()是很難調試,在這裏沒有什麼好處,是很容易被利用,如果你允許任意用戶輸入(例如,a = "__import__('os').system('rm -Rf /')")。

+2

[Oblicatory link](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html) – Volatility 2013-05-05 07:33:32

+0

我把這個問題看成「if a = 1 or 0」,並假設他們忘記了比較==。但你的回答更有意義 – 2013-05-05 08:08:42