首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hello,处理错误

Hello,处理错误
EN

Code Golf用户
提问于 2017-04-12 04:19:00
回答 3查看 704关注 0票数 9

编写具有以下功能的程序或函数:

  • 程序/函数首先尝试将字符串Hello, world!写入标准输出流。(对于这一挑战,没有任何其他形式的输出是可以接受的,因为关注的重点是I/O,而不是程序本身的琐碎行为。)取决于它是否成功:
    • 如果它成功地输出了Hello, world!,程序/函数就会退出,而不会有任何进一步的行为。
    • 如果由于错误而无法产生正确的输出,程序/函数将尝试将字符串Error writing "Hello, world!"写入标准错误流。(就此挑战而言,您不需要对错误处理本身进行错误处理。)

Clarifications

  • 您的程序/函数将在没有输入的情况下运行(除非它是用一种绝对需要输入才能工作的语言编写的,在这种情况下,它将以最简单的输入运行)。
  • 在产生输出时,如果您愿意,也可以生成一个尾换行符,但是这样做并不是必须的。
  • 程序实现的“向标准输出写入错误”的定义至少必须将以下情况视为错误:
    • 标准输出是不存在的(例如,stdout是一个封闭的文件句柄,不存在文件描述符1,或者那些情况转换成您正在使用的语言和操作系统);
    • 标准输出指磁盘上没有空闲空间的文件;
    • 连接到另一个程序的标准输出,该程序已经关闭了连接的结束。

必须至少将下列情况视为成功(即不是错误):

代码语言:javascript
复制
- Standard output connects to a terminal, and `Hello, world!` is displayed onscreen.
- Standard output connects to a file, and `Hello, world!` is written into the file.

您可以选择什么是输出错误的细节,只要它符合上述规则。

  • 您的程序/函数不应在遇到上述任何错误情况时崩溃。这取决于你使用什么出口代码。
  • 您的程序/函数不应该描述标准错误流中遇到的错误的性质;它应该只打印上面指定的字符串。只有无条件地生成标准错误(例如编译器警告)的外部输出才是合法的,无论是否遇到错误。
  • 您的程序只需要在一个操作系统上工作(尽管它必须是上面列出的错误是有意义的;我已经尝试让它们足够通用,可以在大多数多任务的消费者操作系统上工作,但是更奇怪的操作系统很可能被排除在这个挑战之外)。如果您的程序不可移植,请在提交的标题中列出它需要运行的假设。
  • 这一任务在每种语言中都是不可能的(并非每种语言都允许程序以自定义的方式处理输出错误)。你必须在可能的地方选择一种语言。
  • 确保您的程序/功能工作!不要仅仅依靠库函数的文档来完成他们说要做的事情。在实践中,简单输出函数的错误处理常常被打破,即使函数声称在理论上处理错误。

测试用例

下面是一种在Linux上使用bash模拟上述每一种错误条件的方法(您不必使用Linux,但这可能是最简单的测试系统):

代码语言:javascript
复制
your_program_here >&-           # nonexistent stdout
your_program_here > /dev/full   # out of disk space
mkfifo test  # note: change "test" to a filename that isn't in use
true < test &
your_program_here > test        # connecting to a program that doesn't want input
rm test      # clean up the FIFO we used earlier

前两个测试案例是确定性的。最后一个不是(它依赖于竞争条件);为了测试目的,我建议在程序启动和实际输出之间添加一个延迟到标准输出,以确保以公开错误的方式解决竞争条件。

胜利条件

这是一个密码-高尔夫挑战,所以更短更好。和(几乎)总是一样,我们用字节来测量程序的长度。

EN

回答 3

Code Golf用户

发布于 2017-04-12 05:41:50

Python 2,65字节

代码语言:javascript
复制
h='Hello, world!'
try:print h
except:exit('Error writing "%s"'%h)

通过打印单引号可以保存两个字节。

在网上试试!

票数 2
EN

Code Golf用户

发布于 2017-04-12 18:55:08

C,77字节

代码语言:javascript
复制
f(a){a="Error writing \"Hello, world!\"";write(1,a+15,13)-13&&write(2,a,29);}

应召

代码语言:javascript
复制
main(){f(1); return 0;}
票数 0
EN

Code Golf用户

发布于 2018-07-13 19:08:25

R,91字节

代码语言:javascript
复制
s="Hello, world!"
tryCatch(cat(s),error=function(e)cat('Error writing "','"',file=2,sep=s))

在网上试试!

我尝试使用cat(s,file=12)而不是cat(s)运行它,并将正确的文本打印给stderr。否则,这是一个invalid connection错误。

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/116207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档