2011-08-12 32 views
8

Tôi đang di chuyển một Perl (trong đó tôi có rất ít kiến ​​thức) kịch bản để python.Dịch Perl sang Python: làm điều này hoặc chết

$path = $ENV{ 'SOME_NAME' } || die " SOME_NAME ENV VARIABLE NOT FOUND\n"; 

Tôi có thể (hy vọng) xem dòng này làm gì, hoặc đặt biến 'đường dẫn' thành biến môi trường 'SOME_NAME' hoặc thất bại rồi in thông báo lỗi cho người dùng. (Ghi chú bên: bất kỳ ai biết cách tìm công cụ tìm kiếm để tìm các ký tự đặc biệt như '||'?)

Tôi đã cố gắng thực hiện nó theo cách "nhiệt tình" (Dễ hỏi hơn sự cho phép) bằng cách sử dụng :

try: 
    path = os.environ['SOME_NAME'] 
except KeyError,e: 
    print "SOME_NAME ENVIRONMENT VARIABLE NOT FOUND\n" 
    raise e 

nhưng điều này có vẻ khá cồng kềnh, đặc biệt là khi tôi thực hiện nó cho 3 biến môi trường khác nhau.

Bất kỳ ý tưởng nào nếu có triển khai tốt hơn hoặc bạn có nói đây là cách "nhiệt tình" để thực hiện không?

Nhiều Cảm ơn

+0

Về google câu hỏi của bạn, [google help] (http://www.google.com/support/websearch/bin/static.py?hl=en&page=guide.cs&guide=1221265&answer=134479&rd=1): 'chung , dấu chấm câu bị bỏ qua, bao gồm @ # $%^& *() = + [] \ và các ký tự đặc biệt khác.' có thể không làm được nhiều về nó – Jacob

+0

Nghĩ nhiều, chỉ cần tự hỏi liệu có công cụ tìm kiếm không đã không bỏ qua chúng, sẽ hữu ích đặc biệt là khi tìm kiếm những thứ như thế này! – Jdog

+0

@Jdog Bạn có thể có được một cái gì đó có ý nghĩa nếu bạn google tên của nhân vật. Ví dụ để tìm kiếm '||' loại "thanh dọc perl". Nếu có, [wikipedia pages] (http://en.wikipedia.org/wiki/Pipe_character) trên các ký tự và ký hiệu thường liệt kê những gì chúng được sử dụng cho nhiều ngôn ngữ lập trình. – MattLBeck

Trả lời

11
try: 
    path = os.environ['SOME_NAME'] 
    var2 = os.environ['VAR2'] 
    var3 = os.environ['VAR3'] 
    var4 = os.environ['VAR4'] 
except KeyError,e: 
    print "Not found: ", e 

Bạn có thể đặt nhiều hơn một tuyên bố vào một khối try.

+0

Vâng, tôi đã nghĩ rằng tôi cần phải tách biệt để tôi có thể nói với người dùng bị thiếu, nhưng điều đó sẽ được chứa trong traceback của ngoại lệ tất nhiên .. Chúc mừng! – Jdog

6

Những gì bạn có ở đó thực sự là thành ngữ khá phổ biến và được cho là mẫu ưa thích. Hoặc bạn chỉ cần để cho các trường hợp ngoại lệ thông thường vượt qua mà không cần in thêm bất cứ điều gì. Python nguyên bản có cùng tác dụng. Vì vậy,

path = os.environ["SOME_NAME"] 

Sẽ chỉ tự nâng cao ngoại lệ KeyError và hành vi mặc định là thoát khỏi trường hợp ngoại lệ chưa được thực hiện. Traceback sẽ cho bạn thấy những gì và ở đâu.

Tuy nhiên, bạn cũng có thể cung cấp giá trị mặc định, nếu có thể.

path = os.environ.get("SOME_NAME", "/default/value") 

Điều này sẽ không gây ra lỗi và bạn có thể làm điều gì đó hợp lý làm hành động mặc định.

Các vấn đề liên quan