簡體   English   中英

python:[try +除外]如何確保try下的所有命令都已執行?

[英]python: [try + except] How to make sure all command under try is executed?

這是一個非常初學者的問題。 但是我找不到答案...

我想在try下運行所有行。 如果ANY行不可執行,則運行except

例如,我有一些這樣的代碼...

for i in range(0,100):
    try:
        print "a"
        print "b"
        print i, C
        print "d"
    except:
        print i, "fail"

我想try執行所有行。 在此示例中, print C C是不可執行的,因為C不是預定義的。

因此,我想運行print i, "fail"except ,因為NOT ALL下線try是可執行的。

更清楚地說,上面的代碼給了我結果:

a
b
0 0 Fail
a
b
1 1 Fail
a
b
2 2 Fail
...

但我想要這樣的結果:

0 Fail
1 Fail
2 Fail
...

我怎樣才能做到這一點? 謝謝。

更新:
更清楚地說,我不是在尋求結果,而是在尋求一種方法。 我認為應該有一些命令來控制try

您可以更改代碼,以便僅在所有表達式均有效時才打印:

for i in range(0,3):
    try:
        print ("a" + "\n" +
               "b" + "\n" + 
               C   + "\n" +
               "d")
    except:
        print (i, "fail")

相同原則的另一種變體是使用一個列表來存儲所有成功的要打印的東西:

for i in range(0,3):
    try:
        collect = []
        collect.append("a")
        collect.append("b")
        collect.append(C)
        collect.append("d")
        print("\n".join(collect))
    except:
        print (i, "fail")

您可以臨時重定向標准輸出,僅在以下位置打印:

import sys
from StringIO import StringIO


for i in range(0,100):
    sys.stdout = StringIO()
    try:
        print "a"
        print "b"
        print i, C
        print "d"
    except Exception as e:
        sys.stdout = sys.__stdout__
        print i, "fail" # or print e
sys.stdout = sys.__stdout__

這會給你:

0 fail
1 fail
2 fail
3 fail
4 fail
5 fail
6 fail
7 fail
8 fail
9 fail
10 fail
11 fail
12 fail
13 fail
14 fail
15 fail
16 fail
17 fail
18 fail
19 fail
20 fail
21 fail
22 fail
23 fail
24 fail
25 fail
26 fail
27 fail
28 fail
29 fail
30 fail
31 fail
32 fail
33 fail
34 fail
35 fail
36 fail
37 fail
38 fail
39 fail
40 fail
41 fail
42 fail
43 fail
44 fail
45 fail
46 fail
47 fail
48 fail
49 fail
50 fail
51 fail
52 fail
53 fail
54 fail
55 fail
56 fail
57 fail
58 fail
59 fail
60 fail
61 fail
62 fail
63 fail
64 fail
65 fail
66 fail
67 fail
68 fail
69 fail
70 fail
71 fail
72 fail
73 fail
74 fail
75 fail
76 fail
77 fail
78 fail
79 fail
80 fail
81 fail
82 fail
83 fail
84 fail
85 fail
86 fail
87 fail
88 fail
89 fail
90 fail
91 fail
92 fail
93 fail
94 fail
95 fail
96 fail
97 fail
98 fail
99 fail

但是,毫無疑問,有更多更好的方法可以按照您的實際邏輯去做。

將來,您將無法實時打印是否所有呼叫都將成功,因為您尚未看到所有呼叫,因此您需要存儲輸出並查看是否有任何錯誤。

import sys
from StringIO import StringIO

stdo = StringIO()
errs = False
for i in range(0, 100):
    sys.stdout = stdo
    try:
        print "a"
        print "b"
        print i
        print "d"
    except Exception as e:
        sys.stdout = sys.__stdout__
        errs = True
        print i, "fail"
        sys.stdout = stdo

sys.stdout = sys.__stdout__
if not errs:
    print(stdo.getvalue())

任何錯誤都會實時顯示,但是您必須等到最后,看看一切是否成功。

這與@trincot發布的內容非常相似,不確定是否滿足您的要求。

基本上,將所有打印件移至一個單獨的函數,然后嘗試進行調用。

def printer(i=None, C=None):
    print "a"
    print "b"
    print i, C
    print "d"    

for i in range(0,100):
    try:
        printer(i, C)
    except:
        print i, "fail"

暫無
暫無

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

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