Lỗi thời gian vô lý [đóng]


40

Viết các chương trình tạo ra các lỗi thời gian chạy điên rồ, tối nghĩa, lố bịch hoặc đơn giản. Obfuscation và golfitude (độ ngắn) không cần thiết.

  • giải pháp có vẻ như họ nên làm việc tốt là tốt hơn.
  • giải pháp trông giống như họ nên phá vỡ một cách nhưng phá vỡ một cách khác là tốt hơn.
  • các giải pháp không đặc hiệu sẽ tốt hơn miễn là đôi khi chúng có thể tái sản xuất.
  • giải pháp với khoảng cách dài giữa nguyên nhân lỗi và biểu hiện là tốt hơn.
  • điểm thưởng cho việc sản xuất lỗi đó là không thể.
  • điểm thưởng cho các lỗi làm hỏng thời gian chạy (như lỗi phân đoạn python) hoặc hệ điều hành.

Đơn vị của điểm sẽ là upvotes.

Phụ lục 1

Trình biên dịch misbehaviors cũng tốt.


2
Tạo Python segfault rất dễ dàng:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Peter: Rất tiếc. Tôi đã trả lời câu hỏi một nửa bằng cách viết nó: S
Wug

... những gì về malbolge hoặc INTERCAL? Tôi khá chắc chắn rằng họ sẽ có một số lỗi khá điên rồ, có lẽ cũng có thể làm điều đó với một char duy nhất.
acolyte

1
Đây chắc chắn là liên kết tốt nhất để tìm giải pháp: killallsoftware.com/talks/wat :-)
seri

1
Bản sao có thể có của stackoverflow.com/q/1146014/736054 .
Konrad Borowski

Câu trả lời:


69

PHP bắt buộc ( vẫn chưa được sửa chữa vào ngày 5.4):

<?::

Đầu ra:

Lỗi phân tích cú pháp: lỗi cú pháp, T_PAAMAYIM_NEKUDOTAYIM không mong muốn trên dòng 1

Ai vậy


12
Tôi thích cái này Nó có thể là thông báo lỗi yêu thích của tôi. Ngoài một lần, bạn tôi đã cố gắng khởi động máy tính xách tay windows của mình vào phân vùng phục hồi, và nó đã biến toàn bộ màn hình thành một hộp màu trắng với các chữ màu đỏ khổng lồ đánh vần "LRI".
Wug

4
Tuy nhiên, có chủ ý nhưng kỳ lạ: "Paamayim Nekudotayim, ban đầu, có vẻ như là một lựa chọn kỳ lạ để đặt tên cho dấu hai chấm. Tuy nhiên, trong khi viết Zend Engine 0.5 (cung cấp năng lượng cho PHP 3), đó là điều mà nhóm Zend quyết định gọi nó Nó thực sự có nghĩa là hai dấu hai chấm - trong tiếng Do Thái! " php.net/manual/en/lingu.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@HansEngel: Vâng, nó có nghĩa là dấu hai chấm trong tiếng Do Thái. Sử dụng tiếng Anh cho mọi mã thông báo ngoại trừ mã này có ý nghĩa vì ...? Tôi đoán tôi chỉ cần hỏi nhóm PHP.
Ry-

Xin lỗi anh bạn, nhưng bạn chỉ đơn giản gọi phương thức / biến tĩnh ''(chuỗi trống) từ lớp ''(chuỗi trống)
Ismael Miguel

1
@IsmaelMiguel: Thật khó hiểu vì tiếng Do Thái, không phải vì nó sai.
Ry-

61

Lỗi biên dịch Gcc:

int main()
{
        long long long a;
}

lỗi: dài dài quá dài là quá dài đối với GCC


6
Họ chỉ biết rằng ai đó sẽ cố gắng long long long, nếu longlong longcả hai đều hợp lệ.
Konrad Borowski

3
Tôi nghĩ rằng "a quá dài!" sẽ là một thông báo lỗi tốt hơn, nhưng đây vẫn là một câu trả lời tuyệt vời.
Wug

52

Dấu nhắc lệnh của Windows

If you're happy and you know it clap your hands!

Đầu ra:

hạnh phúc là bất ngờ vào lúc này.


1
Tôi đã thử lệnh đó để kiểm tra kết quả, nhưng nó đã hiển thị ^V:( những ngày khó khăn này
Fabricio

8
@Fovenio, có phải chỉ cần nhấn CTRL + V để dán dòng? Trong Command Prompt, "phím tắt" bàn phím để dán là ALT + SPACE, E, P.
Hand-E-Food

42

PHP

$ cat error.php 
<?php
function echo_string(string $string) {
    echo $string;
}
echo_string("Hello, world!");
$ php error.php 
PHP Catchable fatal error:  Argument 1 passed to echo_string() must be an instance of string, string given, called in error.php on line 5 and defined in error.php on line 2

Bạn không thể truyền một chuỗi cho một hàm, thay vào đó bạn phải truyền một chuỗi!

Cập nhật: Mã này KHÔNG phải là một lỗi trong PHP 7. Di chuột vào / nhấp / chạm vào một spoiler để kiểm tra lý do (chứa các phần tiết lộ về cách thức hoạt động của mã).

Một tính năng mới được gọi là khai báo kiểu vô hướng đã được thêm vào trong PHP 7. Tính năng này cho phép sử dụng các kiểu vô hướng trong khai báo hàm.


6
Những gì f *** php.
Wug

7
PHP đang cố gắng để có được lớp string(hợp lệ). Gợi ý gõ (điều mà bạn đang làm) chỉ hoạt động cho các lớp. Vì lớp stringkhông tồn tại, nó ném một lỗi.
Ismael Miguel

Bạn có thể kiểm tra ở đây mã của bạn hoạt động chính xác: sandbox.onlinephpfifts.com/code/,
Ismael Miguel

2
@IsmaelMiguel: Vâng, tôi hiểu tại sao nó xảy ra, nhưng theo tôi thì lỗi vẫn vô lý.
Konrad Borowski

1
Sau đó thử array(''=>array()'').
Ismael Miguel

33

bash

$ echo "Hello, world!"
bash: !": event not found

Và bạn sẽ nghĩ rằng bash sẽ chấp nhận một câu "Xin chào, thế giới!" Đơn giản chương trình.


Giải thích về điều này: các chuỗi được truyền trong dấu ngoặc kép làm đối số cho các chương trình trong bash được mở rộng, nghĩa là `echo hi`biến thành hibên trong chuỗi trích dẫn kép. !được sử dụng làm tiền tố cho các nhà chỉ định sự kiện . Vì vậy, bash cố gắng đánh giá !", nhưng không thể tìm thấy sự kiện được tham chiếu.
Mego

31

Python 2.7

# Look I'm actually coding: see my happy face?
print ':)'

Tạo ra khá không hữu ích:

SyntaxError: encoding problem: with BOM

Làm thế nào một bình luận đơn giản có thể tạo ra một lỗi?


12
Trong các trình thông dịch Python mới nhất: nếu 2 dòng đầu tiên bắt đầu bằng #và chứa chuỗi coding:từ tiếp theo được sử dụng làm mô tả mã hóa
AMK

31

Toán học

Khi sử dụng Mathicala để tạo đầu ra đồ họa, đôi khi người ta kích hoạt các thông báo lỗi được định dạng theo thông số kỹ thuật được sử dụng trong chính chương trình. Đây là một ví dụ tầm thường.

Rotate[f/0, .6]

nhập mô tả hình ảnh ở đây


11
Đó thực sự không phải là một thông báo lỗi, phải không? Đó chỉ là giá trị mà Mathicala trả về khi bạn chia thứ gì đó cho số không.
Ilmari Karonen

26

Máy tính đồ họa TI-89

Tôi phát hiện ra điều này khi học về sự khác biệt ngầm trong tính toán của trường trung học. Nếu bạn nhập:

d(xy+x=0,x)

Bạn nhận được như sau:

1 = 0

Với cảnh báo này, được in bằng chữ nhỏ ở cuối màn hình:

Warning: May produce false equation

Điều này xảy ra bởi vì xykhông được hiểu là x * y, mà là biểu tượng của chính nó , xy.

Điều kỳ lạ là nếu bạn làm thế d(xy=0,x), bạn sẽ nhận được 0 = 0cảnh báo tương tự.


22

Bạn có thể làm cho bộ não của trình biên dịch Haskell bùng nổ:

C:\Windows\system32>ghci
...
Prelude> :set -XExistentialQuantification
Prelude> data Foo = forall a. Foo a
Prelude> let foo f = 1 where Foo a = f

<interactive>:4:21:
    My brain just exploded
    I can't handle pattern bindings for existential or GADT data constructors.
    Instead, use a case-expression, or do-notation, to unpack the constructor.
    In the pattern: Foo a
    In a pattern binding: Foo a = f
    In an equation for `foo':
        foo f
          = 1
          where
              Foo a = f
Prelude>

22

Hồng ngọc

Quy tắc lạm dụng.

class StandardError

  def to_s
    words = File.open('/usr/share/dict/words'){|f|f.readlines.map &:chop}.sample(100)
    words.last.capitalize!
    super.gsub(/\w+/){words.pop}
  end

  to_s(3)

end

Nếu chạy trên OSX, hãy tạo, vd

$ ruby weird_runtime_error.rb 
weird_runtime_error.rb:9:in `to_s': Sculpturation contingence explicate tappet(phonendoscope ethopoeia nannandrous) (ArgumentError)
    from weird_runtime_error.rb:9:in `<class:StandardError>'
    from weird_runtime_error.rb:1:in `<main>'

6
Điều đó có nghĩa là gì?
TRiG

9
Nó có nghĩa là wrong number of arguments(1 for 0). Nó thể hiện rằng thông qua một ngôn ngữ được tạo ra một cách lười biếng và ngẫu nhiên bằng cách sử dụng từ vựng tiếng Anh mà ít quan tâm đến tính hợp lý của ngôn ngữ.
lịch sử

21

Nhắc nhở DOS

c:\>make love

mang đến cho bạn

Fatal Error: 'love' does not exist. Don't know how to make it.

Tình cờ gặp phải điều này trong khi tôi đang cố gắng lăng mạ máy tính của mình vì không hợp tác. Làm tôi buồn một lúc cho đến khi tôi phát hiện ra rằng điều này chỉ xảy ra nếu tình yêu không tồn tại. Nếu nó tồn tại, anh ấy sẽ sẵn sàng làm cho nó.


5
Điều này thực sự dành riêng cho maketiện ích, không phải bản thân DOS.
Vovanium

1
Tôi nhận được:make: *** No rule to make target 'love'. Stop.
bất cứ lúc nào

@agtoever Bạn đang chạy sai.
Navin

Tôi hiểu: make: Fatal error: Don't know how to make target 'love'nhưng đó là trên Unix. Trên DOS, tôi nhận được make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Bash (lỗi Quine)

Lỗi này là một Quine trong Bash!

$ bash: bash:: command not found...
bash: bash:: command not found...

Tất nhiên bạn phải có liên quan locale(tiếng Anh ở đây).


1
Của tôi đã không in ...cuối cùng, vì vậy tôi cũng phải bỏ nó trong đầu vào ban đầu.
Zev Eisenberg

16

CSH

Một cshtrò đùa thực sự cổ điển :

% make fire?
make: No match.

15

Bash - giải trí chính xác của một thông báo lỗi lịch sử hiếm gặp

echo -ne $(tail -n +257 /usr/src/linux*/drivers/char/lp.c | head -1 | cut -d '"' -f 2 | sed 's/%d/0/')

Đầu ra:

lp0 on fire

Yêu cầu nguồn kernel linux được giải nén ở nơi thông thường.

Sự thật thú vị: tôi đã từng nhận được tin nhắn này một cách nghiêm túc, khi chạy một máy in ruy băng cũ.


Đây có phải là một thông báo lỗi, hay chỉ là một đầu ra của một chương trình?
yo '

1
@yo 'bash one-liner tự trả về thành công, nhưng đầu ra mà nó tạo ra là một thông báo lỗi chính hãng; tập lệnh chỉ đơn giản là kéo lỗi từ nguồn trình điều khiển máy in.
Bạo loạn

ah ok, đó là một điều khó khăn để làm :-)
yo '

1
Ngẫu nhiên, lỗi có nghĩa là nó tiếp tục in ra kẹt giấy, đây là một nguy cơ hỏa hoạn.
Joshua

13

C (++)

Nếu lỗi thời gian biên dịch thì đây là một lỗi (giả sử một tệp có tên "crash.c").

#include "crash.c"

int main(){ return 0; }

Nó lấp đầy màn hình với điều này khi biên dịch (sẵn sàng Ctrl-C)

                 from crash.c:1,
                 from crash.c:1:
crash.c:3:1: error: redefinition of ‘main’
crash.c:3:1: note: previous definition of ‘main’ was here
In file included from crash.c:1:0,
                 from crash.c:1,
                 from crash.c:1,

Một đoạn mã khác biên dịch hoàn hảo (không có cảnh báo nào dưới đây -Wallvà minh họa cho loại an toàn tuyệt đẹp của C </ s>

#include <stdio.h>
int i;

int main(){
  sprintf(NULL, "%s", (char *) (void *) (1/i));
  return 0;
}

Chạy nó cho:

Floating point exception (core dumped)

13

Hồng ngọc

Cảm thấy kỳ lạ là điều này có thể xảy ra trong một ngôn ngữ cấp cao.

$*<<$*<<$**$/

sản xuất

ArgumentError: recursive array join

10

Điều này rất cũ, nhưng đối với những người nhớ BCPL,

GET "LIBHDR"

LET START() = VALOF 
$8
        RESULTIS 0
$)

sẽ phàn nàn

$8
 ^
"( ) or 8 expected"

10

R

Về mặt kỹ thuật, đây không phải là lỗi mà là cảnh báo nhưng vẫn vô lý và xảy ra vì những lý do hoàn toàn bí truyền.

[[EDIT]] Dường như nguyên nhân của một số phần của các cảnh báo hài hước nằm trong RStudio chứ không phải R per se, vì vậy nó ít thú vị hơn tôi nghĩ. Ví dụ đầu tiên plot(1:2, NotAGraphicalParameter = "ignore.me"), tuy nhiên, vẫn có thể tái tạo trong R "trần trụi" và đủ hài hước theo cách riêng của nó. [[/ EDIT]]

> plot(1:2, NotAGraphicalParameter = "ignore.me")
# produces a nice scatterplot with two points, [1,1] and [2,2]
Warning messages:
1: In plot.window(...) :
  "NotAGraphicalParameter" is not a graphical parameter
2: In plot.xy(xy, type, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
4: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
5: In box(...) : "NotAGraphicalParameter" is not a graphical parameter
6: In title(...) : "NotAGraphicalParameter" is not a graphical parameter
> plot(2:3)
# another nice scatterplot: [2,2] and [3,3] 
# but there should be nothing wrong this time!
# however ...
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: "NotAGraphicalParameter" is not a graphical parameter
2: "NotAGraphicalParameter" is not a graphical parameter
3: "NotAGraphicalParameter" is not a graphical parameter
4: "NotAGraphicalParameter" is not a graphical parameter
5: "NotAGraphicalParameter" is not a graphical parameter
6: "NotAGraphicalParameter" is not a graphical parameter
7: "NotAGraphicalParameter" is not a graphical parameter
8: "NotAGraphicalParameter" is not a graphical parameter
9: "NotAGraphicalParameter" is not a graphical parameter
10: "NotAGraphicalParameter" is not a graphical parameter
11: "NotAGraphicalParameter" is not a graphical parameter
12: "NotAGraphicalParameter" is not a graphical parameter
# but let's try once more:
> plot(2:3)
# yup. no warnings this time. we had to do it twice

Nó giống như R nhớ những lời lăng mạ của chúng tôi. Nhưng không lâu.

Tôi thực sự không thể giải thích tại sao điều này xảy ra - nhưng nó có thể tái tạo. Trên thực tế, điều này xảy ra mỗi khi bạn cung cấp một số "không phải là tham số đồ họa" cho âm mưu 1, và sau đó thực hiện âm mưu 2 theo cách hoàn hảo. Điều đặc biệt buồn cười là chúng tôi nhận được 12 cảnh báo "không phải là tham số đồ họa" cho cốt truyện thứ hai mà chỉ có 6 cho cảnh đầu tiên. Một điều buồn cười nữa là nếu bạn cung cấp "không phải là tham số đồ họa" với giá trị NULL thì không có điều kiện nào được đưa ra:

plot(1:2, Nonsense=NULL)
# no warnings
# however
plot(1:2, Nonsense="gibberish")
# gives the usual 6-pack of warnings

Và để thậm chí còn kỳ cục hơn nữa, hãy vẽ một số dòng trên đầu của cốt truyện được vẽ trước đó:

plot(1:2)
# you will see the number of warnings growing with each line:
lines(1:2, 1:2, mumbo = 1)
lines(1:2, 1:2, jumbo = 2)
lines(1:2, 1:2, bimbo = 3)
lines(1:2, 1:2, cucaracha = 4)
lines(1:2, 1:2, karaoke = 5)
lines(1:2, 1:2, radiogaga = 6)
lines(1:2, 1:2, reptiles = 7)
lines(1:2, 1:2, cowsonmoon = 8)
lines(1:2, 1:2, stainlessSteelLadderToTheMoon = 9)
lines(1:2, 1:2, frambuesa = 10)
lines(1:2, 1:2, fresa = 11)
lines(1:2, 1:2, limonYNada = 12)
lines(1:2, 1:2, slingsAndArrows = 13)
# ... and now you have 25 warnings:
warnings()

Warning messages:
1: "mumbo" is not a graphical parameter
2: "jumbo" is not a graphical parameter
3: "bimbo" is not a graphical parameter
4: "cucaracha" is not a graphical parameter
5: "karaoke" is not a graphical parameter
6: "radiogaga" is not a graphical parameter
7: "reptiles" is not a graphical parameter
8: "cowsonmoon" is not a graphical parameter
9: "stainlessSteelLadderToTheMoon" is not a graphical parameter
10: "frambuesa" is not a graphical parameter
11: "fresa" is not a graphical parameter
12: "limonYNada" is not a graphical parameter
13: "mumbo" is not a graphical parameter
14: "jumbo" is not a graphical parameter
15: "bimbo" is not a graphical parameter
16: "cucaracha" is not a graphical parameter
17: "karaoke" is not a graphical parameter
18: "radiogaga" is not a graphical parameter
19: "reptiles" is not a graphical parameter
20: "cowsonmoon" is not a graphical parameter
21: "stainlessSteelLadderToTheMoon" is not a graphical parameter
22: "frambuesa" is not a graphical parameter
23: "fresa" is not a graphical parameter
24: "limonYNada" is not a graphical parameter
25: In plot.xy(xy.coords(x, y), type = type, ...) :
  "slingsAndArrows" is not a graphical parameter

Cái này nên không phải giành được thời gian lớn trừ khi không có công lý.


1
Bạn đang sử dụng phiên bản nào của R? Bởi vì tôi không thể sao chép gói cảnh báo mà bạn nhận được plot(2:3)ngay sau khi sử dụng plot(1:2, NotAGraphicalParameter = "ignore.me"). Bạn có định nghĩa lại điều gì trong bạn .Rprofilekhông?
plannapus

1
có vẻ như điều này đặc trưng cho việc chạy R trong Rstudio (cả trên Windows và Ubuntu) nhưng không xảy ra khi bạn chạy R trong thiết bị đầu cuối linux hoặc windows Rgui.
lebatsnok

Tôi nghĩ rằng tôi đã thấy một cái gì đó tương tự với các chức năng mô hình hóa (lm hoặc glm) mà không có Rstudio nhưng không thể sao chép nó ngay bây giờ. (Đó là, những cảnh báo trước đó đã được đưa ra khi không còn liên quan nữa.)
lebatsnok

9

Tập lệnh lệnh Windows

CẢNH BÁO, đây là một quả bom ngã ba!

Điều này sẽ xuất ra các câu hỏi rác về việc bỏ thuốc nếu bạn cố gắng thoát khỏi bàn điều khiển bằng mọi cách.

%0|%0|%0

Tiền thưởng:

  • Sẽ làm cho hệ thống không thể sử dụng được nhiều cho đến khi khởi động lại
  • Ngăn chặn việc bỏ tập lệnh, điều này là không thể

2
Robinson có nguy hiểm không?
Jacob

7

q xúc phạm bạn

q)`u#1 1
'u-fail
q)

`` `u #` `nói qrằng mọi phần tử trong danh sách là duy nhất (vì vậy nó có thể xây dựng một số loại chỉ mục dựa trên hàm băm, có lẽ). Đây là những gì xảy ra khi nó không thực sự đúng.


1
Ngôn ngữ này là gì? Tôi đã cố gắng tìm kiếm ngôn ngữ "q lăng mạ bạn", nhưng tôi không thể tìm thấy bất cứ điều gì.
Konrad Borowski

Xin lỗi vì vô tình khó hiểu, ngôn ngữ là [q] ( en.m.wikipedia.org/wiki/iêu . Nó cũng hoạt động trong k4, BTW.
Aaron Davies

6

Làm thế nào về lỗi tối ưu hóa trình biên dịch:

#include <stdio.h>

#define N 4

int main(void)
{
    int sum;
    int i;
    int arr[N];

    for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
        sum += arr[i];
    }
    printf("%d\n", sum);
    return 0;
}

Điều này đặc trưng cho gcc> = 4.7. Biên dịch và chạy tốt với gcc -O0 -Wall. Biên dịch với gcc -O2 -Wallnhưng kết quả trong một vòng lặp inf.

Cũng lưu ý, làm thế nào gcc thấy vấn đề cho nhỏ hơn N, ví dụ N = 3:

test.c:11:38: warning: array subscript is above array bounds [-Warray-bounds]
  for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
                                       ^
test.c:12:13: warning: 'arr[0]' is used uninitialized in this function [-Wuninitialized]
  sum += arr[i];
         ^

Btw, điều này đã được lấy từ một báo cáo lỗi, mặc dù vậy tôi không thể nhớ lại số lỗi.


3
Vâng, đây là hành vi không xác định, vì vậy trình biên dịch được phép làm bất cứ điều gì. Nhưng vẫn cảm thấy kỳ lạ khi trình biên dịch quyết định thay đổi một phép gán bên ngoài mảng cục bộ không bao giờ được sử dụng và sử dụng giá trị không được khai báo thành một vòng lặp vô hạn, ngay cả khi tiêu chuẩn C cho phép điều này (sau tất cả, nó phụ thuộc vào hành vi không xác định - truy cập arr[N](bên ngoài mảng) và truy cập arr[0](chưa được khởi tạo)). Vì mọi thứ đều được phép cho hành vi không xác định, đây không phải là lỗi tối ưu hóa, nhưng rất khó có thể là điều người dùng muốn.
Konrad Borowski

4
Đây rõ ràng không phải là một lỗi tối ưu hóa trình biên dịch. UB là UB và trình biên dịch sẽ đúng ngay cả khi nó quyết định xóa tất cả dữ liệu của bạn khỏi ổ cứng.
H2CO3

5

Tôi luôn thích sự kỳ lạ này trong APL:

      Rõ ràng là một lỗi cú pháp
      {(]} 3  
LỖI CÚ PHÁP
      {(]} 3

      ⍝ nhưng:
      {(]} 1 0
L ERI TÊN
      {(]} 1 0 

      Even nó thậm chí hoạt động với các chức năng được xác định tĩnh
      ← z ← fx
[1] z ← [{]} x
[2]
      f 1 0
L ERI TÊN
      f 1 0
     ∧
      f 3
LỖI CÚ PHÁP
f [1] z ← [{]} x     

Nó phân tích bên trong các chức năng một cách lười biếng!


4

PHP

<?php
[][] = 42;

[]được sử dụng để đẩy các yếu tố. Tuy nhiên, nếu bạn sử dụng nó cho mảng bằng chữ, PHP sẽ tạo ra thông báo lỗi điên rồ, ngay cả khi bạn gán cho nó để đẩy. Yêu cầu PHP> = 5,4, như trước đó bạn không thể lập chỉ mục bằng chữ.

Đầu ra:

Lỗi nghiêm trọng : Không thể sử dụng [] để đọc trong [...] [...] trên dòng 2


4

Con trăn

Khối lồng nhau

for a in range(26):
 for b in range(26):
  for c in range(26):
   for d in range(26):
    for e in range(26):
     for f in range(26):
      for g in range(26):
       for h in range(26):
        for i in range(26):
         for j in range(26):
          for k in range(26):
           for l in range(26):
            for m in range(26):
             for n in range(26):
              for o in range(26):
               for p in range(26):
                for q in range(26):
                 for r in range(26):
                  for s in range(26):
                   for t in range(26):
                    for u in range(26):
                     for v in range(26):
                      for w in range(26):
                       for x in range(26):
                        for y in range(26):
                         for z in range(26):
                          print a

Python 2.7: SystemError: too many statically nested blocks

Danh sách tự giới thiệu

def printList(myList):
    for element in myList:
        if isinstance(element, list):
            printList(myList)
        else:
            print(element)

a = []
a.append(a)
printList(a)

Python 2.7

Đúng không phải là hằng số

Vấn đề trong ví dụ sau là trong Python 2.7 TrueFalsekhông phải là hằng số. Và TrueFalsecó thể tự động được Casted đến 10:

True=False
a=10/True

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero

Python 2.7:

Dự định

def f(n):
    if n <= 1:
        return n
    else:
        return f(n-1)+f(n-2)

Bạn có nhận được lỗi không?

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 4
    else:
       ^
SyntaxError: invalid syntax

Trộn các tab và khoảng trắng là ổn trong Python 2.7 ... nhưng hãy chú ý đến mức độ thụt lề!


1
Ví dụ về không gian trộn và bảng điều khiển không hoạt động chính xác, vì nền tảng Stack Exchange không cho phép các trình lập bảng trong mã.
Konrad Borowski

@xfix: Ok, nhưng tôi nghĩ những người đọc cái này có được điểm. Hầu hết các biên tập viên không hiển thị không gian / tab (ngoại trừ khoảng trắng ở cuối) và nếu họ hiển thị nó, hầu hết thời gian sẽ có màu xám. Và trong mọi ngôn ngữ khác (ngoại trừ khoảng trắng) khoảng trắng không quan trọng, miễn là có ít nhất một ngôn ngữ ở đó.
Martin Thoma

Bạn nên viết chương trình của mình bằng ngôn ngữ lập trình Whitespace.
Alexander

Có phải Python 3 là một trò đùa?
Ry-

@minitech Mình không có ý kiến. Đó là những gì nó phải làm với print a.
Justin

3

Tôi sẽ bắt đầu:

#include <iostream>

using namespace std;

class A
{
public:
    A()
    {
    }

    void doSomethingDiabolical()
    {
        delete this;
    }

    virtual void breakHorribly()
    {
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
    }
};

class B : public A
{
public:
    B() : A()
    {
    }

    void breakHorribly()
    {
        cout << "still alive" << endl;
        ((A *) this)->breakHorribly();
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
        breakHorribly();
        cout << "dead" << endl;
    }
};

int main()
{
    jane();
}

void jane()
{
    cout << "still alive" << endl;
    A * o = new B;
    cout << "still alive" << endl;
    o->breakHorribly();
}

Bất kỳ đoán tại sao chương trình này sụp đổ? : D

Xem janechạy: http://ideone.com/gtaZ3


1
Đây không phải là một đệ quy vô hạn khá đơn giản sao? B::BreakHorriblygọi chính nó trước doSomethingDiabolicalđược gọi, vì vậy delete thiskhông bao giờ đạt được.
bến tàu

Chương trình này bùng nổ vì một số lượng lớn lý do. Hành vi của nó thay đổi nếu bạn loại bỏ các báo cáo in khác nhau. Tuy nhiên, bạn đã đúng. Tôi đã không có thời gian để tạo lại hành vi không xác định mà tôi đã có một lần, nhưng cuối cùng tôi đã nhận được một cuộc gọi chức năng ảo thuần túy trong thời gian chạy.
Wug

2
Bạn không nói rằng bạn đã từng vô tình gõ một cái gì đó như delete this, phải không?
đã ngừng quay ngược chiều

Không, nó tinh tế hơn thế nhiều, nhưng kết quả cuối cùng là như nhau: một hàm hủy được gọi cho một lớp trong khi thực thi hàm thành viên
Wug

3

Bash

Tôi đã nhận được điều này ngày hôm nay khi tôi cố gắng tìm hiểu liệu có thể bảo vệ hệ thống khỏi rm -rf /.

mkdir /tmp/a
mkdir /tmp/a/b
sudo mount --bind /tmp/a /tmp/a/b
rm -rf /tmp/a

Thông báo lỗi với LANG=C:

rm: WARNING: Circular directory structure.
This almost certainly means that you have a corrupted file system.
NOTIFY YOUR SYSTEM MANAGER.
The following directory is part of the cycle:
  '/tmp/a/b'

Cảnh báo này đến từ rm, không phải bash. Không chắc chắn ngôn ngữ nào bạn nên khai báo trong tiêu đề, cho rằng bạn đã sử dụng bashđể thiết lập ngôn ngữ đó.

2

R

Một số khác không phải là vô lý và, một lần nữa, một cảnh báo chứ không phải là một lỗi, nhưng vẫn tốt đẹp:

> sapply(as.list(-1:-51), log)
 [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[20] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[39] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
There were 50 or more warnings (use warnings() to see the first 50)

Tôi thích bit cuối cùng: 50 trở lên :)

Và các cảnh báo thực tế:

1: In lapply(X = X, FUN = FUN, ...) : NaNs produced
2: In lapply(X = X, FUN = FUN, ...) : NaNs produced
....
50: In lapply(X = X, FUN = FUN, ...) : NaNs produced

Vui = vui!


1
Mã Nyan?! Chà, thật là kỳ lạ!
Kroltan

Tôi không thấy những gì bất ngờ hoặc đáng ngạc nhiên. log của một sản phẩm âm tính Không phải là Số (NaN) như bình thường.
plannapus

2

CPython

import ctypes
import sys
(ctypes.c_char * sys.getsizeof(None)).from_address(id(None))[:4] = '\x00' * 4

Kết quả:

Fatal Python error: deallocating None

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Thậm chí tốt hơn trong Python 3 : ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Bash - thất bại thoát trực giác

echo "this should definitely work!!!11!"

trả lại

-bash: !11: event not found

(mở rộng lịch sử trên dòng lệnh không bị ngăn chặn bởi dấu ngoặc kép)

Tiền thưởng:

echo "I don't know what's gone wrong!! !echo is usually pretty foolproof!-1"

Đầu ra không chắc là như mong đợi. Nhấn lên để nhận lại lệnh và nhận thấy nó đã thay đổi so với những gì bạn đã nhập. Nếu bạn nhấn và nhập một vài lần, có khả năng đầu ra của bạn sẽ bắt đầu trông hơi kinh khủng. Hãy thử nó cho chính mình.


2
Câu trả lời này là bản sao của codegolf.stackexchange.com/a/17776 .
Dennis

2

C # - Trình tạo Fibros đệ quy, lười biếng

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<decimal> fib(decimal n = 0, decimal m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m))
        {
            yield return x;
        }
    }
}

Mã này có vẻ tốt, phải không? Một trình tạo Fibonacci khá đơn giản, được thêm vào một số đệ quy và liệt kê lười biếng. Nên làm việc.

Không! Chạy cái này sẽ gây ra OverflowException. Điều này là do chúng tôi đang sử dụng số thập phân và số Fibonacci thứ 141 (~ 8.1E28) vượt quá giá trị thập phân tối đa (~ 7.9E28).

Tuy nhiên, int không ném OverflowException khi bạn vượt quá giá trị tối đa của nó. Thay vào đó, như mong đợi, tràn đến một giá trị âm. Vì vậy, nếu chúng ta thay thế int thay vì thập phân, như trong đoạn mã sau, nó sẽ hoạt động, phải không?

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<int> fib(int n = 0, int m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m).ToList())
        {
            yield return x;
        }
    }
}

Nếu bạn đọc mã thì rõ ràng tại sao điều này sẽ không hoạt động. Nếu bạn không ... Tôi đã không thay đổi loại từ thập phân sang int; Tôi cũng lẻn vào một cuộc gọi đến ToList () trong câu lệnh foreach. Điều này sẽ buộc các điều tra viên trở lại được đánh giá háo hức. Điều này sẽ gây ra không 141 lần thu hồi, mà thay vào đó là vô số lần thu hồi. Trên thực tế, rất lâu trước khi nó chạm vô cực, tất nhiên nó sẽ tràn vào ngăn xếp, khiến cho bộ thực thi ném một StackOverflowException. (phần thưởng: không thể bắt ngoại lệ này, vì vậy nó sẽ bị lỗi thời gian chạy)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.