วิธีสร้างข้อความออก


208

มีการเรียกฟังก์ชันหนึ่งบรรทัดที่ออกจากโปรแกรมและแสดงข้อความหรือไม่? ฉันรู้ใน Perl มันง่ายเหมือน:

die("Message goes here")

ฉันเบื่อที่จะพิมพ์สิ่งนี้:

puts "Message goes here"
exit

10
ความคิดเห็นเล็ก ๆ ของคุณputsเขียนที่ stdout ในขณะที่dieเขียนไป stderr $stderr.puts "Message goes here"เพื่อ:
cdarke

ฉันรู้ว่านี่ไม่ใช่คำตอบ แต่มันตอบคำถามของฉันขอบคุณ
แพทริค

เพื่อใช้อ้างอิงใน Python sys.exit("Message goes to stderr")เท่านั้น
Anatoly techtonik

คำตอบ:


361

abortฟังก์ชั่นไม่นี้ ตัวอย่างเช่น:

abort("Message goes here")

หมายเหตุ: abortข้อความจะถูกเขียนไปSTDERRเมื่อเทียบกับการที่จะเขียนถึงputsSTDOUT


6
ว้าว! ยินดีที่ได้พบ! น่าเสียดายที่พวกเขาไม่เพียง แต่โหลดเกินพิกัดด้วยฟังก์ชันนี้ ....
Mike Stone

56
หมายเหตุยกเลิกการออกจากโปรแกรมด้วยสถานะเท็จซึ่งหมายถึงความล้มเหลว ออกโดยออกเป็นค่าเริ่มต้นด้วยสถานะที่เป็นจริงซึ่งแสดงถึงความสำเร็จ ให้แน่ใจว่าคุณใช้ที่ถูกต้องสำหรับสถานการณ์
Alex Spurling

1
อีกครั้ง ความคิดเห็นของ Mike Stone บางครั้งดูเหมือนว่า Ruby ถูกเขียนขึ้นโดยทีมงานของคนที่ไม่มีการสื่อสารกับคนอื่นใช่มั้ย (ยังเป็นเรื่องง่ายที่จะเขียนโปรแกรมในนั้น)
JellicleCat

24

หากคุณต้องการแสดงถึงข้อผิดพลาดที่เกิดขึ้นจริงในรหัสของคุณคุณสามารถยกRuntimeErrorข้อยกเว้น:

raise RuntimeError, 'Message goes here'

สิ่งนี้จะพิมพ์สแต็คเทรซชนิดของข้อยกเว้นที่เพิ่มขึ้นและข้อความที่คุณระบุ สแต็คเทรซอาจน่ากลัวเกินไปและขึ้นอยู่กับผู้ใช้ของคุณและข้อความจริงอาจหายไปจากเสียงรบกวน ในทางกลับกันถ้าคุณตายเนื่องจากข้อผิดพลาดจริง stacktrace จะให้ข้อมูลเพิ่มเติมสำหรับการดีบัก


24
คุณไม่จำเป็นต้องพูดถึง RuntimeError เพื่อยกระดับหนึ่ง (มันเป็นชนิดของข้อยกเว้นเริ่มต้น) ดังนั้นรหัสต่อไปนี้จะพอเพียง: เพิ่ม 'ข้อความไปที่นี่'
sunaku

sunaku - ในขณะที่ความคิดเห็นของคุณถูกต้องสมบูรณ์แบบฉันมักจะพบว่าการมีความชัดเจนมากขึ้นจะเป็นประโยชน์โดยเฉพาะอย่างยิ่งสำหรับคนอื่น ๆ ที่อ่านโค้ดในภายหลัง
shevy

2

ฉันไม่เคยได้ยินเกี่ยวกับฟังก์ชันนี้มาก่อน

def die(msg)
  puts msg
  exit
end

จากนั้นหากมีการกำหนดไว้ในไฟล์. rb บางไฟล์ที่คุณใส่ในสคริปต์ของคุณทั้งหมดคุณเป็นทอง .... เพียงเพราะมันไม่ได้อยู่ในตัวไม่ได้หมายความว่าคุณไม่สามารถทำได้ด้วยตัวคุณเอง ;-)


3
เปลี่ยนเป็นฟังก์ชั่น 'ยกเลิก' (ดูคำตอบของฉันด้านล่าง)
Chris Bunch

1
ทำไมต้องเขียนโค้ดเมื่อฟังก์ชั่นการยกเลิกมีไว้เพื่อคุณ
Gary Haran

2
@ChrisBunch นี่ไม่ใช่สิ่งเดียวกับฟังก์ชั่นการยกเลิก: exitค่าเริ่มต้นที่จะกลับมาราวกับว่ามันประสบความสำเร็จ abortส่งคืนความล้มเหลว exit 1จะส่งคืนความล้มเหลวเช่นกัน
TemporalWolf

2

ฉันมาถึงที่นี่เพื่อค้นหาวิธีการรันโค้ดบางอย่างเมื่อใดก็ตามที่โปรแกรมสิ้นสุดลง
พบสิ่งนี้ :

Kernel.at_exit { puts "sayonara" }
# do whatever
# [...]
# call #exit or #abort or just let the program end
# calling #exit! will skip the call

เรียกว่าหลายครั้งจะลงทะเบียนหลายเครื่องจัดการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.