खोज…


वाक्य - विन्यास

  • { -code- } रोका { -रोर- } { -no - error-} ifelse% error फ्रेम को पकड़ रहा है

  • $ त्रुटि / ग़लती से% स्टैन्ड्रफ़्लोफ़्लो टाइपकेक रंगचेक आदि मिलता है
    $ त्रुटि / न्यूट्रर% बूल मिलता है। त्रुटि को निष्क्रिय करने के लिए गलत डालें
    $ त्रुटि / ओस्टैक को त्रुटि के बिंदु पर ऑपरेंड स्टैक की% कॉपी मिलती है

  • गलत / स्टैकओवरफ़्लो { -डायरेक्शनल-कोड- / स्टैकओवरफ़्लो सिग्नलरोर } डाला
    % त्रुटियों के प्रकारों पर अतिरिक्त कोड निष्पादित करते हैं (यहां, / स्टैकओवरफ़्लो त्रुटि)।

टिप्पणियों

पोस्टस्क्रिप्ट में त्रुटि से निपटने के दो स्तर हैं। यह द्विभाजन दोनों को लागू करता है जिस तरह से दुभाषिया त्रुटियों को संभालने के साथ-साथ उपयोगकर्ता (प्रोग्रामर) के लिए उपलब्ध साधनों को संभालता है।

निचले स्तर पर एक असामान्य नियंत्रण संरचना stop ... stoppedstopped बहुत अधिक एक लूपिंग निर्माण की तरह व्यवहार करता है जिसमें यह निष्पादन स्टैक पर एक निशान स्थापित stop है जिसे जंप किया जा सकता है-अगर exit ऑपरेटर (एक लूप के लिए) या stop ऑपरेटर (एक stopped -कंटेक्ट के लिए) को कहा जाता है। एक लूपिंग निर्माण के विपरीत, स्टैक पर एक बुलियन की पैदावार को stopped , यह दर्शाता है कि क्या stop कहा गया था (अन्यथा stopped करने के लिए पारित प्रक्रिया को पूरा करने के लिए निष्पादित किया जाता है।

जब एक पोस्टस्क्रिप्ट त्रुटि की तरह है, तब होता है stackunderflow शायद, दुभाषिया में त्रुटि के नाम की खोज करता है errordict जो में रहती है systemdict । यदि उपयोगकर्ता ने errordict से प्रक्रिया को प्रतिस्थापित नहीं किया है, तो डिफ़ॉल्ट त्रुटि प्रक्रिया सभी स्टैक के स्नैपशॉट लेगी और उन्हें $error में systemdict , जो कि systemdict में एक और शब्दकोश है। अंत में, डिफ़ॉल्ट प्रक्रिया stop हो जाएगी जो निष्पादन स्टैक से उपयोगकर्ता प्रोग्राम को पॉप करती है और handleerror से errordict में इंटरप्रेटर की त्रुटि मुद्रण प्रक्रिया को handleerror errordict

इसलिए इस सभी ज्ञान का उपयोग करके, आप { ... } stopped कोड के एक सेक्शन को लपेटकर त्रुटियों को पकड़ सकते हैं। आप stop कॉल करके किसी त्रुटि को हटा सकते हैं। आप निर्धारित कर सकते हैं कि $error /errorname get साथ किस प्रकार की त्रुटि हुई।

आप एक विशिष्ट प्रकार की त्रुटि के लिए डिफ़ॉल्ट व्यवहार को उस नाम की errordict प्रक्रिया से errordict । या /handleerror में errordict /handleerror द्वारा त्रुटि रिपोर्ट को प्रिंट करने के प्रारूप को errordict

क्या कोई करंट है?

उपज true ढेर पर अगर currentpoint कार्यान्वित सफलतापूर्वक, या false अगर यह एक संकेत है /nocurrentpoint त्रुटि।

{currentpoint pop pop} stopped not  % bool

किसी त्रुटि के संकेत मिलने पर घटनाओं का अनुक्रम

त्रुटि के लिए अनुक्रम आमतौर पर है:

  1. त्रुटी को errordict और इस प्रक्रिया को निष्पादित करने से त्रुटि errordict होती है।
  2. errordict प्रक्रिया कॉल signalerror , इसे पारित त्रुटि नाम।
  3. signalerror $error स्टैक में स्नैपशॉट को सहेजते हुए, signalerror का स्नैपशॉट लेता है और फिर कॉल stop
  4. stop पॉप को तब तक stop जब तक कि बंद ऑपरेटर द्वारा स्थापित निकटतम एन्कोडिंग रोक दिया गया संदर्भ न हो।
  5. यदि प्रोग्राम ने त्रुटि को पकड़ने के लिए अपना स्वयं का रूका हुआ संदर्भ स्थापित नहीं किया है, तो उसे बाहरी स्तर पर stopped { errordict /handleerror get exec } if किया जाता है stopped { errordict /handleerror get exec } if पकड़ा जाएगा, जिसे स्टार्टअप कोड द्वारा पूरे उपयोगकर्ता प्रोग्राम को ब्रैकेट करने के लिए बुलाया गया था।
  6. handleerror त्रुटि रिपोर्ट मुद्रित करने के लिए $error में जानकारी का उपयोग करता है।

सिग्नलिंग (फेंकना) एक त्रुटि

अधिकांश उपकरण त्रुटि को फेंकने के लिए ऑपरेटर के नाम के अपवाद के साथ मानकीकृत होते हैं। Adobe दुभाषियों में, इसे .error कहा जाता है। घोस्टस्क्रिप्ट में, इसे signalerror कहा जाता है। तो इस लाइन के साथ आप उपयोग कर सकते signalerror एडोब दुभाषिए या Ghostscript या xpost के लिए उपसंहार कोड में।

/.error where {pop /signalerror /.error load def} if

commandname errorname signalerror -
$error में स्टैक के स्नैपशॉट लें, फिर stop

उदाहरण के लिए।

% my proc only accepts integer
/proc {
    dup type /integertype ne {
        /proc cvx /typecheck signalerror
    } if
    % ... rest of proc ...
} def

त्रुटि पकड़ना

चूंकि डिफ़ॉल्ट त्रुटि हैंडलर की अंतिम कार्रवाई कॉल stop , इसलिए आप एक { ... } stopped निर्माण में कोड संलग्न करके ऑपरेटरों से त्रुटियों को पकड़ सकते हैं।

{
    0 array
    1 get
} stopped {
    $error /errorname get =
} if

" rangecheck " को प्रिंट करेगा, त्रुटि तब get जब सूचकांक उस सरणी के लिए स्वीकार्य सीमा से बाहर हो।

पुन: फेंकने की त्रुटियाँ

यह स्निपेट एक प्रक्रिया को लागू करता है जो एक पोस्टस्क्रिप्ट लूपिंग ऑपरेटर की तरह व्यवहार करता है। उपयोगकर्ता हैं proc कॉल exit , यह पकड़ता invalidexit त्रुटि के लिए dictstack ठीक करने के लिए end अंत में। invalidexit को छोड़कर किसी भी अन्य त्रुटि को stop कॉल करके फिर से फेंक दिया जाता है।

% array n proc  .  -
% Like `forall` but delivers length=n subsequences produced by getinterval
/fortuple { 4 dict begin
    0 {offset proc n arr} {exch def} forall
    /arr load length n idiv
    {
        {
            /arr load offset n getinterval
            [ /proc load currentdict end /begin cvx ] cvx exec
            /offset offset n add def
        } stopped {
            $error /errorname get /invalidexit eq
            { 1 dict begin exit }{ stop } ifelse
        } if
    } repeat
end
} def

%[ 0 1 10 {} for ] 3 {} fortuple pstack clear ()=


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow